3.9 KiB
3.9 KiB
首次登录强制修改密码功能
功能说明
当管理员首次登录或需要重置密码时,系统会强制要求修改密码后才能正常使用系统。
安装步骤
方式一:使用安装脚本(推荐)
Windows 系统
install_first_login_password.bat
Linux/Mac 系统
chmod +x install_first_login_password.sh
./install_first_login_password.sh
方式二:手动执行 SQL
执行 add_is_paw_field.sql 文件中的 SQL 语句:
ALTER TABLE `la_admin`
ADD COLUMN `is_paw` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否已修改初始密码:0=需要修改,1=正常' AFTER `multipoint_login`;
使用方法
设置管理员需要修改密码
如果需要强制某个管理员在下次登录时修改密码,执行以下 SQL:
UPDATE la_admin SET is_paw = 0 WHERE id = <管理员ID>;
例如,强制 ID 为 1 的管理员修改密码:
UPDATE la_admin SET is_paw = 0 WHERE id = 1;
批量设置所有管理员
如果需要强制所有管理员修改密码:
UPDATE la_admin SET is_paw = 0;
工作流程
- 管理员登录系统
- 系统检查
is_paw字段- 如果
is_paw = 0:跳转到修改密码页面 - 如果
is_paw = 1:正常进入系统
- 如果
- 管理员在修改密码页面输入新密码
- 密码修改成功后,
is_paw自动更新为 1 - 系统要求重新登录
- 使用新密码登录后正常使用系统
安全机制
系统通过路由守卫确保安全性:
- 强制跳转:当
is_paw = 0时,用户访问任何页面都会被强制跳转到修改密码页面 - URL 防护:即使用户直接在浏览器输入其他页面 URL,也会被拦截并跳转到修改密码页面
- 状态持久化:
is_paw状态存储在 Vuex store 中,页面刷新后仍然有效 - 防止绕过:修改密码页面需要登录才能访问,但已修改密码的用户无法再次访问该页面
技术实现
后端修改
- LoginLogic.php - 登录逻辑返回
is_paw字段 - LoginController.php - 添加
changeFirstPassword接口 - 数据库 - 添加
is_paw字段
前端修改
- login.vue - 登录成功后判断
is_paw字段 - change-password.vue - 新增修改密码页面
- routes.ts - 添加修改密码路由
- user.ts - 添加修改密码 API
- user.ts (store) - 存储
isPaw状态 - permission.ts - 路由守卫,强制需要修改密码的用户只能访问修改密码页面
字段说明
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| is_paw | TINYINT(1) | 1 | 0=需要修改密码,1=正常 |
注意事项
- 修改密码后会自动退出登录,需要使用新密码重新登录
- 密码长度不能少于 6 位
- 两次输入的密码必须一致
- 该功能同时支持账号密码登录和企业微信登录
测试步骤
1. 安装功能
执行安装脚本或手动执行 SQL 添加 is_paw 字段。
2. 设置测试账号
-- 设置 ID 为 1 的管理员需要修改密码
UPDATE la_admin SET is_paw = 0 WHERE id = 1;
3. 测试登录流程
- 使用该管理员账号登录
- 登录成功后应自动跳转到修改密码页面
- 输入新密码(至少 6 位)
- 确认修改后应提示"密码修改成功,请重新登录"
- 自动跳转到登录页面
- 使用新密码登录,应能正常进入系统
4. 验证数据库
-- 查看管理员的 is_paw 状态,应该已更新为 1
SELECT id, account, is_paw FROM la_admin WHERE id = 1;
5. 使用测试 SQL
可以使用 test_first_login.sql 文件中的 SQL 语句进行测试。
安全建议
- 建议为新创建的管理员账号设置
is_paw = 0,强制首次登录修改密码 - 定期要求管理员修改密码,可批量设置
is_paw = 0 - 密码应包含字母、数字和特殊字符,提高安全性