Enable login interface captcha function (#165)

* enable captcha login

* Delete menu meta column

* Update the login interface rate limit
This commit is contained in:
Wu Clan
2023-07-02 16:05:40 +08:00
committed by GitHub
parent f3e5c788e3
commit 22e205524b
4 changed files with 8 additions and 9 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ async def swagger_user_login(form_data: OAuth2PasswordRequestForm = Depends()) -
'/login',
summary='用户登录',
description='json 格式登录, 仅支持在第三方api工具调试接口, 例如: postman',
dependencies=[Depends(RateLimiter(times=5, minutes=15))],
dependencies=[Depends(RateLimiter(times=5, minutes=1))],
)
async def user_login(request: Request, obj: AuthLogin, background_tasks: BackgroundTasks):
access_token, refresh_token, access_expire, refresh_expire, user = await AuthService().login(
-1
View File
@@ -22,7 +22,6 @@ class Menu(Base):
icon: Mapped[str | None] = mapped_column(String(100), default=None, comment='菜单图标')
path: Mapped[str | None] = mapped_column(String(200), default=None, comment='路由地址')
menu_type: Mapped[int] = mapped_column(default=0, comment='菜单类型(0目录 1菜单 2按钮)')
meta: Mapped[dict | None] = mapped_column(JSON, default=None, comment='菜单元数据')
component: Mapped[str | None] = mapped_column(String(255), default=None, comment='组件路径')
perms: Mapped[str | None] = mapped_column(String(100), default=None, comment='权限标识')
status: Mapped[int] = mapped_column(default=1, comment='菜单状态(0停用 1正常)')
+1 -2
View File
@@ -17,8 +17,7 @@ class Auth(SchemaBase):
class AuthLogin(Auth):
# captcha: str
pass
captcha: str
class CreateUser(Auth):
+6 -5
View File
@@ -12,6 +12,7 @@ from backend.app.common.enums import LoginLogStatus
from backend.app.common.exception import errors
from backend.app.common.jwt import get_token
from backend.app.common.redis import redis_client
from backend.app.common.response.response_code import CustomCode
from backend.app.core.conf import settings
from backend.app.crud.crud_user import UserDao
from backend.app.database.db_mysql import async_db_session
@@ -50,11 +51,11 @@ class AuthService:
raise errors.AuthorizationError(msg='密码错误')
elif not current_user.status:
raise errors.AuthorizationError(msg='用户已锁定, 登陆失败')
# captcha_code = await redis_client.get(f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
# if not captcha_code:
# raise errors.AuthorizationError(msg='验证码失效,请重新获取')
# if captcha_code.lower() != obj.captcha.lower():
# raise errors.CustomError(error=CustomCode.CAPTCHA_ERROR)
captcha_code = await redis_client.get(f'{settings.CAPTCHA_LOGIN_REDIS_PREFIX}:{request.state.ip}')
if not captcha_code:
raise errors.AuthorizationError(msg='验证码失效,请重新获取')
if captcha_code.lower() != obj.captcha.lower():
raise errors.CustomError(error=CustomCode.CAPTCHA_ERROR)
await UserDao.update_login_time(db, obj.username, self.login_time)
user = await UserDao.get(db, current_user.id)
access_token, access_token_expire_time = await jwt.create_access_token(