doido-auth 0.0.20

Unified authentication for Doido — AuthUser trait, extractors, strategies, and auth generators.
Documentation
use crate::models::user::Model as User;
use doido::controller::{controller, Response};
use doido::model::password::HasSecurePassword;
use doido_auth::{sign_in, sign_out};
use serde::Deserialize;

#[derive(Deserialize)]
pub struct SignInForm {
    pub email: String,
    pub password: String,
}

pub struct SessionsController;

#[controller]
impl SessionsController {
    /// POST /users/sign_in
    pub async fn create(mut ctx: doido::controller::Context) -> doido::Result<Response> {
        let form: SignInForm = ctx.body_json().await?;
        if let Some(user) = User::find_by_email(ctx.db(), &form.email).await? {
            if user.authenticate(&form.password) {
                sign_in(ctx, &user)?;
                return Ok(ctx.json(user));
            }
        }
        Ok(ctx.status(401))
    }

    /// DELETE /users/sign_out
    pub async fn destroy(mut ctx: doido::controller::Context) -> doido::Result<Response> {
        sign_out(ctx)?;
        Ok(ctx.status(204))
    }
}