feat: 新增用户注册模块

This commit is contained in:
insistence
2024-01-28 22:24:13 +08:00
parent 69fac31ff4
commit 0cd4a6b0df
6 changed files with 67 additions and 3 deletions

View File

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

View File

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

View File

@@ -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

View File

@@ -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

View File

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

View File

@@ -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>