У меня есть следующий код, в котором я использую проверки Rocket:
#[derive(Debug, Deserialize, FromForm)]
pub struct CreateUserDto<'r> {
#[field(validate = email_validation())]
email: &'r str,
password: &'r str,
}
fn email_validation(email: &str) -> Result<()> {
let re: Regex = Regex::new(r"^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$").unwrap();
if !re.is_match(email) {
Err(Error::validation("invalid email address"))?;
}
Ok(())
}
В этом коде я пытаюсь проверить поле электронной почты в соответствии с заданным регулярным выражением. По какой-то причине функция email_validation
никогда не вызывается.
Есть идеи, почему? Я следовал документации Rocket, как показано здесь: https://api.rocket.rs/master/rocket/form/validate/#custom-validation
Я также попытался добавить встроенную проверку:
#[derive(Debug, Deserialize, FromForm)]
pub struct CreateUserDto<'r> {
#[field(validate = range(2..10))]
id: usize,
#[field(validate = email_validation())]
pub email: &'r str,
pub password: &'r str,
}
И вот конечная точка:
#[post("/", data = "<input>")]
fn creart_user(input: Json<CreateUserDto>) {
let user = input.into_inner();
println!("email {0}, password: {1}", user.email, user.password);
}
В обоих случаях проверка не сработала.
Кажется, что проверки работают, когда применяется Form
:
#[post("/", data = "<input>")]
fn creart_user(input: Form<CreateUserDto>) {
let user = input.into_inner();
println!("email {0}, password: {1}", user.email, user.password);
}
Есть идеи, как его запустить на Json
?
Использование регулярного выражения для проверки адреса электронной почты всегда подвержено ошибкам.
Я также пытался создать другой валидатор, который не удался ни на одном входе.
примеры не полные. Но самый основной не работает :/
Похоже, что валидаторы работают не на Json, а только на Form. См. обновленный вопрос.
Rocket реализует проверку только для форм. Насколько я могу судить, нет способа запустить проверку для других типов.
Однако вы можете использовать другой ящик проверки. Валидатор кажется самым популярным вариантом, и существует ракетная валидация, которая обеспечивает rocket
защиту validator
.
отладка и отправка недопустимого значения: vvv.com (вместо [email protected]