Login
No account yet?
Sign up
● ● ●
// 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")
}