Skip to content
Clone
f0a1552
26 lines 850 B Rust
use serde::{Deserialize, Serialize};
use session::{Session, SessionUser, SessionUserMut};
use super::AuthService;
use crate::errors::AuthError;
use session::share::session::session_token_key;
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct LogoutResp {
pub logged_out: bool,
}
impl AuthService {
pub async fn logout(&self, session: &Session) -> Result<LogoutResp, AuthError> {
let Some(uid) = session.uid() else {
session.clear_uid();
return Ok(LogoutResp { logged_out: true });
};
if let Some(token_hash) = session.get::<String>(&session_token_key(uid)) {
let _ = self.revoke_session(&token_hash).await;
}
session.logout_user(uid);
session.remove(&session_token_key(uid));
Ok(LogoutResp { logged_out: true })
}
}