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

143 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 首次登录强制修改密码功能
## 功能说明
当管理员首次登录或需要重置密码时,系统会强制要求修改密码后才能正常使用系统。
## 安装步骤
### 方式一:使用安装脚本(推荐)
#### 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. 密码应包含字母、数字和特殊字符,提高安全性