# 首次登录强制修改密码功能 ## 功能说明 当管理员首次登录或需要重置密码时,系统会强制要求修改密码后才能正常使用系统。 ## 安装步骤 ### 方式一:使用安装脚本(推荐) #### Windows 系统 ```bash install_first_login_password.bat ``` #### Linux/Mac 系统 ```bash chmod +x install_first_login_password.sh ./install_first_login_password.sh ``` ### 方式二:手动执行 SQL 执行 `add_is_paw_field.sql` 文件中的 SQL 语句: ```sql ALTER TABLE `la_admin` ADD COLUMN `is_paw` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否已修改初始密码:0=需要修改,1=正常' AFTER `multipoint_login`; ``` ## 使用方法 ### 设置管理员需要修改密码 如果需要强制某个管理员在下次登录时修改密码,执行以下 SQL: ```sql UPDATE la_admin SET is_paw = 0 WHERE id = <管理员ID>; ``` 例如,强制 ID 为 1 的管理员修改密码: ```sql UPDATE la_admin SET is_paw = 0 WHERE id = 1; ``` ### 批量设置所有管理员 如果需要强制所有管理员修改密码: ```sql 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. 设置测试账号 ```sql -- 设置 ID 为 1 的管理员需要修改密码 UPDATE la_admin SET is_paw = 0 WHERE id = 1; ``` ### 3. 测试登录流程 1. 使用该管理员账号登录 2. 登录成功后应自动跳转到修改密码页面 3. 输入新密码(至少 6 位) 4. 确认修改后应提示"密码修改成功,请重新登录" 5. 自动跳转到登录页面 6. 使用新密码登录,应能正常进入系统 ### 4. 验证数据库 ```sql -- 查看管理员的 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. 密码应包含字母、数字和特殊字符,提高安全性