gitdataai/libs/service/auth/logout.rs
2026-04-15 09:08:09 +08:00

29 lines
960 B
Rust

use crate::AppService;
use crate::error::AppError;
use models::users::user_activity_log;
use sea_orm::*;
use serde_json::json;
use session::Session;
impl AppService {
pub async fn auth_logout(&self, context: &Session) -> Result<(), AppError> {
if let Some(user_uid) = context.user() {
slog::info!(self.logs, "User logged out"; "user_uid" => %user_uid, "ip" => context.ip_address());
let _ = user_activity_log::ActiveModel {
user_uid: Set(Option::from(user_uid)),
action: Set("logout".to_string()),
ip_address: Set(context.ip_address()),
user_agent: Set(context.user_agent()),
details: Set(json!({})),
created_at: Set(chrono::Utc::now()),
..Default::default()
}
.insert(&self.db)
.await;
}
context.clear_user();
context.clear();
Ok(())
}
}