bcrypt.compare对比数据库存储哈希与明文密码始终返回false问题
bcrypt哈希密码存储后对比失败问题解决
故障表现
- 同一函数内对明文密码做bcrypt哈希后,即时调用
bcrypt.compare对比明文与哈希结果,可正常返回true - 哈希密码存入数据库后,登录环节调用
bcrypt.compare对比请求传入的明文密码与数据库取出的哈希值,始终返回false
前期排查尝试
先后测试两种哈希处理方案,均未解决问题:
- 在注册路由逻辑内直接对明文密码做哈希处理,再写入数据库
- 在userSchema的
pre save钩子中统一拦截写入操作,处理密码哈希逻辑
根因定位
用户模型的密码字段错误配置了lowercase: true属性。bcrypt生成的哈希值为大小写敏感格式,写入数据库时该配置会自动将哈希值全部转为小写,破坏了原有哈希值的正确结构,导致后续对比始终不匹配。
解决方案
移除用户模型密码字段的lowercase: true配置,bcrypt对比功能即可恢复正常。
内容的提问来源于stack exchange,提问作者N.M
相关产品推荐
相关产品推荐

