Skip to content

Commit 90f0df8

Browse files
committed
feat: 账号密码支持自定义更新周期
1 parent 5fa7d9a commit 90f0df8

File tree

5 files changed

+33
-0
lines changed

5 files changed

+33
-0
lines changed

ruoyi-fastapi-backend/module_admin/entity/vo/user_vo.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class CurrentUserModel(BaseModel):
127127
roles: List = Field(description='角色信息')
128128
user: Union[UserInfoModel, None] = Field(description='用户信息')
129129
is_default_modify_pwd: bool = Field(default=False, description='是否初始密码修改提醒')
130+
is_password_expired: bool = Field(default=False, description='密码是否过期提醒')
130131

131132

132133
class UserDetailModel(BaseModel):

ruoyi-fastapi-backend/module_admin/service/login_service.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ async def get_current_user(
245245
is_default_modify_pwd = await cls.__init_password_is_modify(
246246
request, query_user.get('user_basic_info').pwd_update_date
247247
)
248+
is_password_expired = await cls.__password_is_expired(
249+
request, query_user.get('user_basic_info').pwd_update_date
250+
)
248251

249252
current_user = CurrentUserModel(
250253
permissions=permissions,
@@ -257,6 +260,7 @@ async def get_current_user(
257260
role=CamelCaseUtil.transform_result(query_user.get('user_role_info')),
258261
),
259262
isDefaultModifyPwd=is_default_modify_pwd,
263+
isPasswordExpired=is_password_expired,
260264
)
261265
return current_user
262266
else:
@@ -277,6 +281,26 @@ async def __init_password_is_modify(cls, request: Request, pwd_update_date: date
277281
)
278282
return init_password_is_modify == '1' and pwd_update_date is None
279283

284+
@classmethod
285+
async def __password_is_expired(cls, request: Request, pwd_update_date: datetime):
286+
"""
287+
判断当前用户密码是否过期
288+
289+
:param request: Request对象
290+
:param pwd_update_date: 密码最后更新时间
291+
:return: 密码是否过期
292+
"""
293+
password_validate_days = await request.app.state.redis.get(
294+
f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.account.passwordValidateDays'
295+
)
296+
if password_validate_days and int(password_validate_days) > 0:
297+
if pwd_update_date is None:
298+
return True
299+
expire_date = pwd_update_date + timedelta(days=int(password_validate_days))
300+
if datetime.now() > expire_date:
301+
return True
302+
return False
303+
280304
@classmethod
281305
async def get_current_user_routers(cls, user_id: int, query_db: AsyncSession):
282306
"""

ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,7 @@ insert into sys_config values(4, '账号自助-验证码开关', 'sys.
707707
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', current_timestamp, '', null, '是否开启注册用户功能(true开启,false关闭)');
708708
insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', current_timestamp, '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
709709
insert into sys_config values(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', current_timestamp, '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
710+
insert into sys_config values(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', current_timestamp, '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
710711

711712
-- ----------------------------
712713
-- 14、系统访问记录

ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,7 @@ insert into sys_config values(4, '账号自助-验证码开关', 'sys.
556556
insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
557557
insert into sys_config values(6, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
558558
insert into sys_config values(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
559+
insert into sys_config values(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
559560

560561

561562
-- ----------------------------

ruoyi-fastapi-frontend/src/store/modules/user.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ const user = {
8383
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
8484
}).catch(() => {})
8585
}
86+
/* 过期密码提示 */
87+
if(!res.isDefaultModifyPwd && res.isPasswordExpired) {
88+
MessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
89+
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
90+
}).catch(() => {})
91+
}
8692
resolve(res)
8793
}).catch(error => {
8894
reject(error)

0 commit comments

Comments
 (0)