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,
    Prisme(form): Prisme<LoginForm>,
) -> AppResult<Response> {
    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();

        // Search via the built-in user entity
        let user_opt = BuiltinUserEntity::find_by_username(&request.engine.db, &username).await;

        match user_opt {
            Some(user) if verify(&password, user.password_hash()) => {
                auth_login(&request.session, &request.engine.db, user.user_id()).await?;
                return Ok(Redirect::to("/profile").into_response());
            }
            _ => {}
        }
    }
    request.render("auth/login.html")
}