90 lines
2.5 KiB
Markdown
90 lines
2.5 KiB
Markdown
|
|
# 修复 nick_name 字段错误
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
微信登录时出现错误:
|
|||
|
|
```
|
|||
|
|
Field 'nick_name' doesn't have a default value
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 问题原因
|
|||
|
|
|
|||
|
|
1. **数据库表结构**:`sys_user` 表中的 `nick_name` 字段定义为 `NOT NULL` 且无默认值
|
|||
|
|
2. **代码问题**:微信登录代码在创建新用户时未设置 `nick_name` 字段值
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
### ✅ 方案1:代码修复(已实施)
|
|||
|
|
|
|||
|
|
在 `SysLoginController.java` 的 `weixinLogin` 方法中,创建新用户时添加了 `nick_name` 字段的设置:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
user.setNickName(phoneNumber); // 使用手机号作为默认昵称
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修改位置**:
|
|||
|
|
- 文件:`ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java`
|
|||
|
|
- 行号:约 203 行
|
|||
|
|
|
|||
|
|
### 方案2:数据库表结构修改(可选)
|
|||
|
|
|
|||
|
|
如果需要更灵活的方案,可以修改数据库表结构,允许 `nick_name` 为 NULL:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
ALTER TABLE sys_user
|
|||
|
|
MODIFY COLUMN nick_name VARCHAR(30) DEFAULT NULL COMMENT '用户昵称';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
执行脚本:`sql/fix_nick_name_default.sql`
|
|||
|
|
|
|||
|
|
## 数据库表检查结果
|
|||
|
|
|
|||
|
|
### ✅ 所有核心表都已正常创建
|
|||
|
|
|
|||
|
|
- ✓ sys_user
|
|||
|
|
- ✓ sys_role
|
|||
|
|
- ✓ sys_menu
|
|||
|
|
- ✓ sys_dept
|
|||
|
|
- ✓ sys_post
|
|||
|
|
- ✓ sys_config
|
|||
|
|
- ✓ sys_dict_type
|
|||
|
|
- ✓ sys_dict_data
|
|||
|
|
- ✓ sys_notice
|
|||
|
|
- ✓ sys_oper_log
|
|||
|
|
- ✓ sys_logininfor
|
|||
|
|
|
|||
|
|
### sys_user 表结构
|
|||
|
|
|
|||
|
|
**必填但无默认值的字段**:
|
|||
|
|
- `user_name` (varchar(30)) - 用户账号
|
|||
|
|
- `nick_name` (varchar(30)) - 用户昵称
|
|||
|
|
|
|||
|
|
**已添加的字段**:
|
|||
|
|
- ✓ `openid` (varchar(100)) - 微信openid
|
|||
|
|
|
|||
|
|
## 修复步骤
|
|||
|
|
|
|||
|
|
1. ✅ **代码修复**:已在创建用户时设置 `nick_name`
|
|||
|
|
2. ✅ **数据库字段**:`openid` 字段已添加
|
|||
|
|
3. ⚠️ **建议**:重启后端服务以应用代码更改
|
|||
|
|
|
|||
|
|
## 测试
|
|||
|
|
|
|||
|
|
修复后,请重新测试微信登录功能:
|
|||
|
|
1. 在小程序中重新尝试登录
|
|||
|
|
2. 应该不再出现 `Field 'nick_name' doesn't have a default value` 错误
|
|||
|
|
3. 新用户创建时,`nick_name` 会自动设置为手机号
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
|
|||
|
|
- `ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java` - 微信登录控制器
|
|||
|
|
- `sql/check_tables.py` - 数据库表检查脚本
|
|||
|
|
- `sql/fix_nick_name_default.sql` - 数据库表结构修复脚本(可选)
|
|||
|
|
- `sql/fix_openid_field.py` - openid 字段添加脚本(已执行)
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
- 如果后端服务正在运行,需要重启服务以应用代码更改
|
|||
|
|
- 新用户创建时,`nick_name` 会使用手机号作为默认值
|
|||
|
|
- 如果需要更灵活的昵称设置,可以考虑从微信用户信息中获取昵称
|