Browse Source

feat: 新增用户注册模块

master
insistence 1 year ago
parent
commit
0cd4a6b0df
  1. 4
      ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py
  2. 15
      ruoyi-fastapi-backend/module_admin/controller/login_controller.py
  3. 11
      ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py
  4. 35
      ruoyi-fastapi-backend/module_admin/service/login_service.py
  5. 1
      ruoyi-fastapi-frontend/src/views/login.vue
  6. 4
      ruoyi-fastapi-frontend/src/views/register.vue

4
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)

15
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:

11
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

35
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

1
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;

4
ruoyi-fastapi-frontend/src/views/register.vue

@ -1,7 +1,7 @@
<template>
<div class="register">
<el-form ref="registerRef" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">若依后台管理系统</h3>
<h3 class="title">vfadmin后台管理系统</h3>
<el-form-item prop="username">
<el-input
v-model="registerForm.username"
@ -70,7 +70,7 @@
</el-form>
<!-- 底部 -->
<div class="el-register-footer">
<span>Copyright © 2018-2023 ruoyi.vip All Rights Reserved.</span>
<span>Copyright © 2024 insistence.tech All Rights Reserved.</span>
</div>
</div>
</template>

Loading…
Cancel
Save