|
13 | 13 | from backend.app.admin.service.login_log_service import login_log_service
|
14 | 14 | from backend.common.enums import LoginLogStatusType
|
15 | 15 | from backend.common.exception import errors
|
| 16 | +from backend.common.log import log |
16 | 17 | from backend.common.response.response_code import CustomErrorCode
|
17 | 18 | from backend.common.security.jwt import (
|
18 | 19 | create_access_token,
|
|
23 | 24 | password_verify,
|
24 | 25 | )
|
25 | 26 | from backend.core.conf import settings
|
26 |
| -from backend.database.db_mysql import async_db_session |
| 27 | +from backend.database.db_mysql import async_db_session, uuid4_str |
27 | 28 | from backend.database.db_redis import redis_client
|
28 | 29 | from backend.utils.timezone import timezone
|
29 | 30 |
|
@@ -52,44 +53,47 @@ async def login(
|
52 | 53 | self, *, request: Request, response: Response, obj: AuthLoginParam, background_tasks: BackgroundTasks
|
53 | 54 | ) -> GetLoginToken:
|
54 | 55 | async with async_db_session.begin() as db:
|
| 56 | + user = None |
55 | 57 | try:
|
56 | 58 | user = await self.user_verify(db, obj.username, obj.password)
|
57 |
| - user_id = user.id |
58 |
| - user_uuid = user.uuid |
59 |
| - username = user.username |
60 | 59 | captcha_code = await redis_client.get(f'{admin_settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
|
61 | 60 | if not captcha_code:
|
62 | 61 | raise errors.AuthorizationError(msg='验证码失效,请重新获取')
|
63 | 62 | if captcha_code.lower() != obj.captcha.lower():
|
64 | 63 | raise errors.CustomError(error=CustomErrorCode.CAPTCHA_ERROR)
|
| 64 | + user_id = user.id |
65 | 65 | a_token = await create_access_token(str(user_id), user.is_multi_login)
|
66 | 66 | r_token = await create_refresh_token(str(user_id), user.is_multi_login)
|
67 | 67 | except errors.NotFoundError as e:
|
| 68 | + log.error('登陆错误: 用户名不存在') |
68 | 69 | raise errors.NotFoundError(msg=e.msg)
|
69 | 70 | except (errors.AuthorizationError, errors.CustomError) as e:
|
| 71 | + if not user: |
| 72 | + log.error('登陆错误: 用户密码有误') |
70 | 73 | task = BackgroundTask(
|
71 | 74 | login_log_service.create,
|
72 | 75 | **dict(
|
73 | 76 | db=db,
|
74 | 77 | request=request,
|
75 |
| - user_uuid=user_uuid, |
76 |
| - username=username, |
| 78 | + user_uuid=user.uuid if user else uuid4_str(), |
| 79 | + username=obj.username, |
77 | 80 | login_time=timezone.now(),
|
78 | 81 | status=LoginLogStatusType.fail.value,
|
79 | 82 | msg=e.msg,
|
80 | 83 | ),
|
81 | 84 | )
|
82 | 85 | raise errors.AuthorizationError(msg=e.msg, background=task)
|
83 | 86 | except Exception as e:
|
| 87 | + log.error(f'登陆错误: {e}') |
84 | 88 | raise e
|
85 | 89 | else:
|
86 | 90 | background_tasks.add_task(
|
87 | 91 | login_log_service.create,
|
88 | 92 | **dict(
|
89 | 93 | db=db,
|
90 | 94 | request=request,
|
91 |
| - user_uuid=user_uuid, |
92 |
| - username=username, |
| 95 | + user_uuid=user.uuid, |
| 96 | + username=obj.username, |
93 | 97 | login_time=timezone.now(),
|
94 | 98 | status=LoginLogStatusType.success.value,
|
95 | 99 | msg='登录成功',
|
|
0 commit comments