This commit is contained in:
Your Name
2026-03-27 18:06:12 +08:00
parent 9160c36735
commit 099bc1dd22
645 changed files with 276473 additions and 957 deletions
+142
View File
@@ -0,0 +1,142 @@
# 首次登录强制修改密码功能
## 功能说明
当管理员首次登录或需要重置密码时,系统会强制要求修改密码后才能正常使用系统。
## 安装步骤
### 方式一:使用安装脚本(推荐)
#### 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. 密码应包含字母、数字和特殊字符,提高安全性