|
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