Repository navigation
[bug] Request 表中 UNIQUE 不生效 #282
Copy link
Copy link
Closed
Labels
Description
环境信息
- 系统: Windows 10
- JDK: 13
- 数据库: MySQL 5.7
- APIJSON: 4.7.0
问题描述
使用 APIJSONBoot 示例项目。在 Request 表中,method=POST, tag=register 的用户注册方法,Structure 内要求 Privacy 表中 Phone 字段 unique。
先随便使用一个账户登录,有登录态之后不经过 /register 端点,而是直接从 /POST 端点调用此方法,也可以正常注册用户。(不使用 /register 是因为其中首先用 HEADS 检查了手机号存在,我想看看 Structure 中 UNIQUE 是否能独立工作。)
但是如果用户提供的 Phone 在数据库中已经存在,返回报错是底层数据库的报错(apijson_privacy 表中 phone 列有 UNIQUE 限制),而非校验的报错。在数据库中取消 phone 列的 UNIQUE 限制,多次注册相同手机号的用户,均成功。这说明 APIJSON 自身的 UNIQUE 限定没有正常工作,只是被数据库兜底了才没出问题。
在 AbstractVerifier.verifyRepeat 方法下断点,可以发现 result 已经拿到了数据库中已经存在的相同手机号的用户,但是这里的判断条件似乎有问题,导致重复异常没能正常触发。
错误信息
Request 表中 Structure
{
"User": {
"MUST": "name",
"REFUSE": "id",
"UPDATE": {
"id@": "Privacy/id"
}
},
"Privacy": {
"MUST": "_password,phone",
"REFUSE": "id",
"UNIQUE": "phone",
"VERIFY": {
"phone~": "PHONE"
}
}
}示例请求
{
"Privacy": {
"phone": "13323332339",
"_password": "mypassord2"
},
"User": {
"name": "test"
},
"verify": "5424",
"tag": "register"
}未移除数据库中 UNIQUE 限定时,存在相同手机号返回的报错
(注意这里是 java.sql 的异常,而不是 APIJSON 自己的异常)
{
"Privacy": {
"phone": "13323332339",
"_password": "mypassord2"
},
"User": {
"name": "test",
"id@": "Privacy/id"
},
"verify": "5424",
"ok": false,
"code": 500,
"msg": "Duplicate entry '13323332339' for key 'phone_UNIQUE'",
"sql:generate|cache|execute|maxExecute": "1|0|1|200",
"depth:count|max": "1|5",
"time:start|duration|end": "1627580061511|55|1627580061566",
"throw": "java.sql.SQLIntegrityConstraintViolationException",
"trace": [ 省略 ]
}移除数据库 UNIQUE 限定后,重复手机号依然正常注册
{
"Privacy": {
"ok": true,
"code": 200,
"msg": "success",
"count": 1,
"id": 1627580277720
},
"User": {
"ok": true,
"code": 200,
"msg": "success",
"count": 1,
"id": 1627580277720
},
"verify": "5424",
"ok": true,
"code": 200,
"msg": "success",
"sql:generate|cache|execute|maxExecute": "2|0|2|200",
"depth:count|max": "1|5",
"time:start|duration|end": "1627580277712|15|1627580277727"
}
Reactions are currently unavailable

Activity
TommyLemon commentedon Jul 31, 2021
感谢反馈,某次重构导致的 bug,已解决。
646bed4
TommyLemon commentedon Jul 31, 2021
4.7.2 发布
https://github.com/APIJSON/APIJSON-Demo/releases/tag/4.7.2
jerrylususu commentedon Jul 31, 2021
4.7.2 验证已解决。感谢帮助!