凭据正确却被拒先查登录校验哪个字段

**「账号密码是对的,但 API 说凭据无效」不一定错在密码 —— 先看登录逻辑用哪个字段做校验。** 实测:登录只按 `users.username` 匹配,而用户提供的是 `users.email`,凭据本身没错,是**标识字段错配**。

为什么容易误判

认证失败通常只有一种对外表现(401 / 拒绝),但内部原因至少三类:

  1. 密码错
  2. 账号不存在
  3. 校验用的字段与用户提供的凭据不是同一个(username ≠ email)

第三类的症状和前两类完全一样,但改密码永远修不好,反复重试还可能触发账号锁定。

正确做法

  • 读登录校验代码,确认 WHERE 用的是哪个字段(username?email?手机号?),再确认用户给的凭据落在哪个字段。
  • 一次性重置脚本要同时按 username 或 email 查找匹配账号,只改密码哈希,不新建用户、不动业务数据。
  • 重试要有上限:停止重试是为了避免账号被锁定,不代表服务端坏了 —— 不要把它当成根因。

相关