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 { let Some(uid) = session.uid() else { session.clear_uid(); return Ok(LogoutResp { logged_out: true }); }; if let Some(token_hash) = session.get::(&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 }) } }