更新
This commit is contained in:
@@ -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. 密码应包含字母、数字和特殊字符,提高安全性
|
||||
Reference in New Issue
Block a user