User can sign out
This commit is contained in:
parent
e07dee7fde
commit
372dfa3f31
@ -26,18 +26,31 @@ struct LoginTemplate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(serde::Deserialize)]
|
#[derive(serde::Deserialize)]
|
||||||
pub struct LoginRequest {
|
pub struct LoginRequestBody {
|
||||||
login: String,
|
login: String,
|
||||||
password: String,
|
password: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Deserialize)]
|
||||||
|
pub struct LoginRequestQuery {
|
||||||
|
logout: Option<bool>,
|
||||||
|
}
|
||||||
|
|
||||||
/// Authenticate user
|
/// Authenticate user
|
||||||
pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
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 {
|
id: Identity) -> impl Responder {
|
||||||
let mut danger = String::new();
|
let mut danger = String::new();
|
||||||
|
let mut success = String::new();
|
||||||
let mut login = 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
|
// Check if user is already authenticated
|
||||||
if SessionIdentity::is_authenticated(&id) {
|
if SessionIdentity::is_authenticated(&id) {
|
||||||
return redirect_user("/");
|
return redirect_user("/");
|
||||||
@ -75,9 +88,14 @@ pub async fn login_route(users: web::Data<Addr<UsersActor>>,
|
|||||||
_parent: BaseLoginPage {
|
_parent: BaseLoginPage {
|
||||||
page_title: "Login",
|
page_title: "Login",
|
||||||
danger,
|
danger,
|
||||||
success: "".to_string(),
|
success,
|
||||||
app_name: APP_NAME,
|
app_name: APP_NAME,
|
||||||
},
|
},
|
||||||
login,
|
login,
|
||||||
}.render().unwrap())
|
}.render().unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sign out user
|
||||||
|
pub async fn logout_route() -> impl Responder {
|
||||||
|
redirect_user("/login?logout=true")
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ use clap::Parser;
|
|||||||
|
|
||||||
use basic_oidc::constants::{DEFAULT_ADMIN_PASSWORD, DEFAULT_ADMIN_USERNAME};
|
use basic_oidc::constants::{DEFAULT_ADMIN_PASSWORD, DEFAULT_ADMIN_USERNAME};
|
||||||
use basic_oidc::controllers::assets_controller::assets_route;
|
use basic_oidc::controllers::assets_controller::assets_route;
|
||||||
use basic_oidc::controllers::login_controller::login_route;
|
use basic_oidc::controllers::login_controller::{login_route, logout_route};
|
||||||
use basic_oidc::data::app_config::AppConfig;
|
use basic_oidc::data::app_config::AppConfig;
|
||||||
use basic_oidc::data::entity_manager::EntityManager;
|
use basic_oidc::data::entity_manager::EntityManager;
|
||||||
use basic_oidc::data::user::{hash_password, User};
|
use basic_oidc::data::user::{hash_password, User};
|
||||||
@ -81,6 +81,9 @@ async fn main() -> std::io::Result<()> {
|
|||||||
// Login page
|
// Login page
|
||||||
.route("/login", web::get().to(login_route))
|
.route("/login", web::get().to(login_route))
|
||||||
.route("/login", web::post().to(login_route))
|
.route("/login", web::post().to(login_route))
|
||||||
|
|
||||||
|
// Logout page
|
||||||
|
.route("/logout", web::get().to(logout_route))
|
||||||
})
|
})
|
||||||
.bind(config.listen_address)?
|
.bind(config.listen_address)?
|
||||||
.run()
|
.run()
|
||||||
|
Loading…
Reference in New Issue
Block a user