Files
zyt/FIRST_LOGIN_PASSWORD_CHANGE.md
T
2026-03-27 18:06:12 +08:00

3.9 KiB
Raw Blame History

首次登录强制修改密码功能

功能说明

当管理员首次登录或需要重置密码时,系统会强制要求修改密码后才能正常使用系统。

安装步骤

方式一:使用安装脚本(推荐)

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;

工作流程

  1. 管理员登录系统
  2. 系统检查 is_paw 字段
    • 如果 is_paw = 0:跳转到修改密码页面
    • 如果 is_paw = 1:正常进入系统
  3. 管理员在修改密码页面输入新密码
  4. 密码修改成功后,is_paw 自动更新为 1
  5. 系统要求重新登录
  6. 使用新密码登录后正常使用系统

安全机制

系统通过路由守卫确保安全性:

  1. 强制跳转:当 is_paw = 0 时,用户访问任何页面都会被强制跳转到修改密码页面
  2. URL 防护:即使用户直接在浏览器输入其他页面 URL,也会被拦截并跳转到修改密码页面
  3. 状态持久化is_paw 状态存储在 Vuex store 中,页面刷新后仍然有效
  4. 防止绕过:修改密码页面需要登录才能访问,但已修改密码的用户无法再次访问该页面

技术实现

后端修改

  1. LoginLogic.php - 登录逻辑返回 is_paw 字段
  2. LoginController.php - 添加 changeFirstPassword 接口
  3. 数据库 - 添加 is_paw 字段

前端修改

  1. login.vue - 登录成功后判断 is_paw 字段
  2. change-password.vue - 新增修改密码页面
  3. routes.ts - 添加修改密码路由
  4. user.ts - 添加修改密码 API
  5. user.ts (store) - 存储 isPaw 状态
  6. permission.ts - 路由守卫,强制需要修改密码的用户只能访问修改密码页面

字段说明

字段名 类型 默认值 说明
is_paw TINYINT(1) 1 0=需要修改密码,1=正常

注意事项

  1. 修改密码后会自动退出登录,需要使用新密码重新登录
  2. 密码长度不能少于 6 位
  3. 两次输入的密码必须一致
  4. 该功能同时支持账号密码登录和企业微信登录

测试步骤

1. 安装功能

执行安装脚本或手动执行 SQL 添加 is_paw 字段。

2. 设置测试账号

-- 设置 ID 为 1 的管理员需要修改密码
UPDATE la_admin SET is_paw = 0 WHERE id = 1;

3. 测试登录流程

  1. 使用该管理员账号登录
  2. 登录成功后应自动跳转到修改密码页面
  3. 输入新密码(至少 6 位)
  4. 确认修改后应提示"密码修改成功,请重新登录"
  5. 自动跳转到登录页面
  6. 使用新密码登录,应能正常进入系统

4. 验证数据库

-- 查看管理员的 is_paw 状态,应该已更新为 1
SELECT id, account, is_paw FROM la_admin WHERE id = 1;

5. 使用测试 SQL

可以使用 test_first_login.sql 文件中的 SQL 语句进行测试。

安全建议

  1. 建议为新创建的管理员账号设置 is_paw = 0,强制首次登录修改密码
  2. 定期要求管理员修改密码,可批量设置 is_paw = 0
  3. 密码应包含字母、数字和特殊字符,提高安全性