use crate::errors::ApiError; pub use crate::services::logout::*; use api::http::State; use api::middleware::RequestId; use api::rest::{AppResponseData, NoData}; use session::Session; #[utoipa::path( post, path = "/auth/logout", tag = "auth", operation_id = "auth_logout", summary = "登出", description = "销毁当前会话,并清掉该用户的 `/api/v1/auth/me` 缓存。匿名调用同样成功,此时 `user_id` 为 `null`。", responses( (status = 200, description = "会话已销毁", body = AppResponseData, example = json!({"code":200,"message":"success","data":{"user_id":1024}})), (status = 500, description = "服务端故障(`internal`、`database`、`cache`、`session`、`serialization`)", body = AppResponseData, example = json!({"code": "internal", "message": "internal server error"})) ) )] pub async fn logout( State(svc): State, session: Session, request_id: RequestId, ) -> Result, ApiError> { let response = svc.logout(session, request_id.0).await?; Ok(AppResponseData::ok(response)) }