User can sign out
This commit is contained in:
@ -26,18 +26,31 @@ struct LoginTemplate {
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
pub struct LoginRequest {
|
||||
pub struct LoginRequestBody {
|
||||
login: String,
|
||||
password: String,
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
pub struct LoginRequestQuery {
|
||||
logout: Option<bool>,
|
||||
}
|
||||
|
||||
/// Authenticate user
|
||||
pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
req: Option<web::Form<LoginRequest>>,
|
||||
query: web::Query<LoginRequestQuery>,
|
||||
req: Option<web::Form<LoginRequestBody>>,
|
||||
id: Identity) -> impl Responder {
|
||||
let mut danger = String::new();
|
||||
let mut success = String::new();
|
||||
let mut login = String::new();
|
||||
|
||||
// Check if user session must be closed
|
||||
if let Some(true) = query.logout {
|
||||
id.forget();
|
||||
success = "Goodbye!".to_string();
|
||||
}
|
||||
|
||||
// Check if user is already authenticated
|
||||
if SessionIdentity::is_authenticated(&id) {
|
||||
return redirect_user("/");
|
||||
@ -75,9 +88,14 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
||||
_parent: BaseLoginPage {
|
||||
page_title: "Login",
|
||||
danger,
|
||||
success: "".to_string(),
|
||||
success,
|
||||
app_name: APP_NAME,
|
||||
},
|
||||
login,
|
||||
}.render().unwrap())
|
||||
}
|
||||
|
||||
/// Sign out user
|
||||
pub async fn logout_route() -> impl Responder {
|
||||
redirect_user("/login?logout=true")
|
||||
}
|
Reference in New Issue
Block a user