mirror of
https://github.com/insistence/RuoYi-Vue3-FastAPI.git
synced 2026-09-21 20:55:15 +00:00
feat: 账号密码支持自定义更新周期
This commit is contained in:
@@ -127,6 +127,7 @@ class CurrentUserModel(BaseModel):
|
||||
roles: List = Field(description='角色信息')
|
||||
user: Union[UserInfoModel, None] = Field(description='用户信息')
|
||||
is_default_modify_pwd: bool = Field(default=False, description='是否初始密码修改提醒')
|
||||
is_password_expired: bool = Field(default=False, description='密码是否过期提醒')
|
||||
|
||||
|
||||
class UserDetailModel(BaseModel):
|
||||
|
||||
@@ -245,6 +245,9 @@ class LoginService:
|
||||
is_default_modify_pwd = await cls.__init_password_is_modify(
|
||||
request, query_user.get('user_basic_info').pwd_update_date
|
||||
)
|
||||
is_password_expired = await cls.__password_is_expired(
|
||||
request, query_user.get('user_basic_info').pwd_update_date
|
||||
)
|
||||
|
||||
current_user = CurrentUserModel(
|
||||
permissions=permissions,
|
||||
@@ -257,6 +260,7 @@ class LoginService:
|
||||
role=CamelCaseUtil.transform_result(query_user.get('user_role_info')),
|
||||
),
|
||||
isDefaultModifyPwd=is_default_modify_pwd,
|
||||
isPasswordExpired=is_password_expired,
|
||||
)
|
||||
return current_user
|
||||
else:
|
||||
@@ -277,6 +281,26 @@ class LoginService:
|
||||
)
|
||||
return init_password_is_modify == '1' and pwd_update_date is None
|
||||
|
||||
@classmethod
|
||||
async def __password_is_expired(cls, request: Request, pwd_update_date: datetime):
|
||||
"""
|
||||
判断当前用户密码是否过期
|
||||
|
||||
:param request: Request对象
|
||||
:param pwd_update_date: 密码最后更新时间
|
||||
:return: 密码是否过期
|
||||
"""
|
||||
password_validate_days = await request.app.state.redis.get(
|
||||
f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.account.passwordValidateDays'
|
||||
)
|
||||
if password_validate_days and int(password_validate_days) > 0:
|
||||
if pwd_update_date is None:
|
||||
return True
|
||||
expire_date = pwd_update_date + timedelta(days=int(password_validate_days))
|
||||
if datetime.now() > expire_date:
|
||||
return True
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
async def get_current_user_routers(cls, user_id: int, query_db: AsyncSession):
|
||||
"""
|
||||
|
||||
@@ -707,6 +707,7 @@ insert into sys_config values(4, '账号自助-验证码开关', 'sys.
|
||||
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', current_timestamp, '', null, '是否开启注册用户功能(true开启,false关闭)');
|
||||
insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', current_timestamp, '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
|
||||
insert into sys_config values(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', current_timestamp, '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
|
||||
insert into sys_config values(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', current_timestamp, '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
|
||||
|
||||
-- ----------------------------
|
||||
-- 14、系统访问记录
|
||||
|
||||
@@ -556,6 +556,7 @@ insert into sys_config values(4, '账号自助-验证码开关', 'sys.
|
||||
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
|
||||
insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
|
||||
insert into sys_config values(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
|
||||
insert into sys_config values(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
|
||||
@@ -59,6 +59,12 @@ const useUserStore = defineStore(
|
||||
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
|
||||
}).catch(() => {})
|
||||
}
|
||||
/* 过期密码提示 */
|
||||
if(!res.isDefaultModifyPwd && res.isPasswordExpired) {
|
||||
ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
|
||||
}).catch(() => {})
|
||||
}
|
||||
resolve(res)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
|
||||
Reference in New Issue
Block a user