diff --git a/ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py b/ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py index 8028ece..4fc64b6 100644 --- a/ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py +++ b/ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py @@ -15,6 +15,8 @@ captchaController = APIRouter() async def get_captcha_image(request: Request): try: captcha_enabled = True if await request.app.state.redis.get(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:sys.account.captchaEnabled") == 'true' else False + register_enabled = True if await request.app.state.redis.get( + f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:sys.account.registerUser") == 'true' else False session_id = str(uuid.uuid4()) captcha_result = CaptchaService.create_captcha_image_service() image = captcha_result[0] @@ -22,7 +24,7 @@ async def get_captcha_image(request: Request): await request.app.state.redis.set(f"{RedisInitKeyConfig.CAPTCHA_CODES.get('key')}:{session_id}", computed_result, ex=timedelta(minutes=2)) logger.info(f'编号为{session_id}的会话获取图片验证码成功') return ResponseUtil.success( - model_content=CaptchaCode(captchaEnabled=captcha_enabled, img=image, uuid=session_id) + model_content=CaptchaCode(captchaEnabled=captcha_enabled, registerEnabled=register_enabled, img=image, uuid=session_id) ) except Exception as e: logger.exception(e) diff --git a/ruoyi-fastapi-backend/module_admin/controller/login_controller.py b/ruoyi-fastapi-backend/module_admin/controller/login_controller.py index 2b77f00..d62c48f 100644 --- a/ruoyi-fastapi-backend/module_admin/controller/login_controller.py +++ b/ruoyi-fastapi-backend/module_admin/controller/login_controller.py @@ -82,6 +82,21 @@ async def get_login_user_routers(request: Request, current_user: CurrentUserMode return ResponseUtil.error(msg=str(e)) +@loginController.post("/register", response_model=CrudResponseModel) +async def register_user(request: Request, user_register: UserRegister, query_db: Session = Depends(get_db)): + try: + user_register_result = await register_user_services(request, query_db, user_register) + if user_register_result.is_success: + logger.info(user_register_result.message) + return ResponseUtil.success(data=user_register_result, msg=user_register_result.message) + else: + logger.warning(user_register_result.message) + return ResponseUtil.failure(msg=user_register_result.message) + except Exception as e: + logger.exception(e) + return ResponseUtil.error(msg=str(e)) + + @loginController.post("/getSmsCode", response_model=SmsCode) async def get_sms_code(request: Request, user: ResetUserModel, query_db: Session = Depends(get_db)): try: diff --git a/ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py b/ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py index 6c1ba12..09a595f 100644 --- a/ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py +++ b/ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py @@ -14,6 +14,16 @@ class UserLogin(BaseModel): captcha_enabled: Optional[bool] = None +class UserRegister(BaseModel): + model_config = ConfigDict(alias_generator=to_camel) + + username: str + password: str + confirm_password: str + code: Optional[str] = None + uuid: Optional[str] = None + + class Token(BaseModel): access_token: str token_type: str @@ -23,6 +33,7 @@ class CaptchaCode(BaseModel): model_config = ConfigDict(alias_generator=to_camel) captcha_enabled: bool + register_enabled: bool img: str uuid: str diff --git a/ruoyi-fastapi-backend/module_admin/service/login_service.py b/ruoyi-fastapi-backend/module_admin/service/login_service.py index d978002..8290b3d 100644 --- a/ruoyi-fastapi-backend/module_admin/service/login_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/login_service.py @@ -262,6 +262,41 @@ class LoginService: return router_list +async def register_user_services(request: Request, query_db: Session, user_register: UserRegister): + """ + 用户注册services + :param request: Request对象 + :param query_db: orm对象 + :param user_register: 注册用户对象 + :return: 注册结果 + """ + register_enabled = True if await request.app.state.redis.get(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:sys.account.registerUser") == 'true' else False + captcha_enabled = True if await request.app.state.redis.get(f"{RedisInitKeyConfig.SYS_CONFIG.get('key')}:sys.account.captchaEnabled") == 'true' else False + if user_register.password == user_register.confirm_password: + if register_enabled: + if captcha_enabled: + captcha_value = await request.app.state.redis.get(f"{RedisInitKeyConfig.CAPTCHA_CODES.get('key')}:{user_register.uuid}") + if not captcha_value: + logger.warning("验证码已失效") + return CrudResponseModel(is_success=False, message='验证码已失效') + elif user_register.code != str(captcha_value): + logger.warning("验证码错误") + return CrudResponseModel(is_success=False, message='验证码错误') + add_user = AddUserModel( + userName=user_register.username, + nickName=user_register.username, + password=PwdUtil.get_password_hash(user_register.password) + ) + result = UserService.add_user_services(query_db, add_user) + return result + else: + result = dict(is_success=False, message='注册程序已关闭,禁止注册') + else: + result = dict(is_success=False, message='两次输入的密码不一致') + + return CrudResponseModel(**result) + + async def get_sms_code_services(request: Request, query_db: Session, user: ResetUserModel): """ 获取短信验证码service diff --git a/ruoyi-fastapi-frontend/src/views/login.vue b/ruoyi-fastapi-frontend/src/views/login.vue index 0591396..3ac59e1 100644 --- a/ruoyi-fastapi-frontend/src/views/login.vue +++ b/ruoyi-fastapi-frontend/src/views/login.vue @@ -140,6 +140,7 @@ function handleLogin() { function getCode() { getCodeImg().then(res => { captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled; + register.value = res.registerEnabled === undefined ? false : res.registerEnabled; if (captchaEnabled.value) { codeUrl.value = "data:image/gif;base64," + res.img; loginForm.value.uuid = res.uuid; diff --git a/ruoyi-fastapi-frontend/src/views/register.vue b/ruoyi-fastapi-frontend/src/views/register.vue index 64aea63..43e97e4 100644 --- a/ruoyi-fastapi-frontend/src/views/register.vue +++ b/ruoyi-fastapi-frontend/src/views/register.vue @@ -1,7 +1,7 @@