You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bcrypt.compare对比数据库存储哈希与明文密码始终返回false问题

bcrypt哈希密码存储后对比失败问题解决

故障表现

  • 同一函数内对明文密码做bcrypt哈希后,即时调用bcrypt.compare对比明文与哈希结果,可正常返回true
  • 哈希密码存入数据库后,登录环节调用bcrypt.compare对比请求传入的明文密码与数据库取出的哈希值,始终返回false

前期排查尝试

先后测试两种哈希处理方案,均未解决问题:

  • 在注册路由逻辑内直接对明文密码做哈希处理,再写入数据库
  • 在userSchema的pre save钩子中统一拦截写入操作,处理密码哈希逻辑

根因定位

用户模型的密码字段错误配置了lowercase: true属性。bcrypt生成的哈希值为大小写敏感格式,写入数据库时该配置会自动将哈希值全部转为小写,破坏了原有哈希值的正确结构,导致后续对比始终不匹配。

解决方案

移除用户模型密码字段的lowercase: true配置,bcrypt对比功能即可恢复正常。

内容的提问来源于stack exchange,提问作者N.M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:27:03