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 config.constant import RedisKeyConfig
|
||||||
from controller.login import CustomOAuth2PasswordRequestForm, LoginController
|
from controller.login import CustomOAuth2PasswordRequestForm, LoginController
|
||||||
from controller.query import QueryController
|
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.common import BaseResponse
|
||||||
from schemas.login import LoginParams, GetUserInfoResponse, LoginResponse, GetCaptchaResponse, GetEmailCodeParams, \
|
from schemas.login import LoginParams, GetUserInfoResponse, LoginResponse, GetCaptchaResponse, GetEmailCodeParams, \
|
||||||
ResetPasswordParams
|
ResetPasswordParams
|
||||||
@@ -271,3 +271,31 @@ async def logout(request: Request, status: bool = Depends(LoginController.logout
|
|||||||
if status:
|
if status:
|
||||||
return Response.success(data="退出成功!")
|
return Response.success(data="退出成功!")
|
||||||
return Response.error(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