From 1dd9f7db43bf16e0a9b7fd015a90b9cc393e5834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9A=93=E6=9C=88=E5=BD=92=E5=B0=98?= Date: Tue, 25 Feb 2025 18:20:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=94=80?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/login.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/api/login.py b/api/login.py index af91477..af7df87 100644 --- a/api/login.py +++ b/api/login.py @@ -18,7 +18,7 @@ from config.constant import BusinessType from config.constant import RedisKeyConfig from controller.login import CustomOAuth2PasswordRequestForm, LoginController from controller.query import QueryController -from models import Department, User, Role, UserRole +from models import Department, User, Role, UserRole, LoginLog, OperationLog from schemas.common import BaseResponse from schemas.login import LoginParams, GetUserInfoResponse, LoginResponse, GetCaptchaResponse, GetEmailCodeParams, \ ResetPasswordParams @@ -271,3 +271,31 @@ async def logout(request: Request, status: bool = Depends(LoginController.logout if status: return Response.success(data="退出成功!") return Response.error(data="登出失败!") + + +@loginAPI.post("/unsubscribe", response_class=JSONResponse, response_model=BaseResponse, summary="用户注销") +@Log(title="用户注销", business_type=BusinessType.FORCE) +async def unsubscribe(request: Request, current_user: dict = Depends(LoginController.get_current_user)): + id = current_user.get("id") + session_id = current_user.get("session_id") + if user := await User.get_or_none(id=id, del_flag=1): + user.del_flag = 0 + await user.save() + redis_token = await request.app.state.redis.get(f'{RedisKeyConfig.ACCESS_TOKEN.key}:{session_id}') + if redis_token: + await request.app.state.redis.delete(f'{RedisKeyConfig.ACCESS_TOKEN.key}:{session_id}') + # 移除用户角色 + await UserRole.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 移除用户登录日志 + await LoginLog.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 移除用户操作日志 + await OperationLog.filter(user_id=user.id, del_flag=1).update(del_flag=0) + # 更新用户信息缓存 + if await request.app.state.redis.get(f'{RedisKeyConfig.USER_INFO.key}:{id}'): + await request.app.state.redis.delete(f'{RedisKeyConfig.USER_INFO.key}:{id}') + # 更新用户路由缓存 + if await request.app.state.redis.get(f'{RedisKeyConfig.USER_ROUTES.key}:{id}'): + await request.app.state.redis.delete(f'{RedisKeyConfig.USER_ROUTES.key}:{id}') + return Response.success(data="注销成功!") + else: + return Response.error(data="注销失败!")