Node.js+JWT+MySQL注册登录系统登录返回incorrect username错误如何解决
问题排查与修复方案
你接口返回incorrect username说明代码走到了数据库查询结果为空的分支,按以下优先级排查即可:
- 检查接口入参是否正确
在db.query执行前打印req.body.user_name,确认前端传参的字段名和你取值的字段名一致,比如前端传的是username而非user_name的话,取值为undefined自然查不到对应结果。 - 核对数据库字段与存储内容
- 确认
users表的用户名字段名确实是user_name,如果表字段实际为username,SQL语句匹配不到字段会返回空结果 - 检查已注册的用户名存储值和登录传入值是否一致,比如是否存在前后空格、大小写差异,如果数据库排序规则为大小写敏感,拼写不一致会导致匹配失败
- 确认
- 优化SQL查询写法
你当前的SQL拼接写法存在转义异常的风险,换成官方推荐的参数化查询写法,避免特殊字符转义错误导致匹配失败:// 替换原来的db.query写法 db.query('select * from users where user_name = ?', [req.body.user_name], (err, result) => { // 原有逻辑 }) - 其他代码缺陷修复
你现有代码中bcrypt校验部分存在逻辑错误:if (bErr)分支先执行了throw bErr,后续的return语句永远不会执行,抛出错误会直接导致接口500,建议调整为:if (bErr) { console.log(bErr) return res.status(401).send({msg:"密码校验失败"}) }
内容的提问来源于stack exchange,提问作者ha33
相关产品推荐
相关产品推荐

