Login

Please log in to access your profile.
← Back to home
● ● ●
// Manual form — no model, no clean
pub struct LoginForm {
    pub form: Forms,
}

impl RuniqueForm for LoginForm {
    fn register_fields(form: &mut Forms) {
        form.field(
            &TextField::text("username")
                .label("Username")
                .required(),
        );
        form.field(
            &TextField::password("password")
                .label("Password")
                .required(),
        );
    }
      impl_form_access!();
}
pub async fn login(mut request: Request) -> AppResult<Response> {
    let mut form: LoginForm = request.form();
    if request.is_post() && form.is_valid().await {
        let username = form.cleaned_string("username").unwrap_or_default();
        let password = form.cleaned_string("password").unwrap_or_default();
        let db = &request.engine.db;
        let user = search!(UserEntity => Username eq username.as_str())
            .first(db).await.unwrap_or(None);
        if let Some(u) = user
            && u.is_active && verify(&password, &u.password)
        {
            auth_login(&request.session, db, u.id).await.ok();
            return Ok(Redirect::to("/profile").into_response());
        }
    }
    request.render("auth/login.html")
}