feat: 添加注销功能
This commit is contained in:
30
api/login.py
30
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="注销失败!")
|
||||
|
||||
Reference in New Issue
Block a user