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

bcrypt密码比对失败求助:注册哈希成功但登录比对失败

bcrypt密码比对失败问题排查与修复

1. 注册阶段核心逻辑错误

你的注册代码存在致命问题:哈希操作时用的是数据库中已有的user.password,而非用户输入的原始密码,这会导致存储的是「哈希后的哈希值」,登录时用原始密码自然无法匹配。

同时代码存在语法错误:setUser(user) { 多了多余的大括号,会导致代码执行异常,哈希过程可能未正确完成。

修正后的注册哈希部分代码:

getAllUsers().then((res) => {
  let user = res.data.find((u) => u.ugovor === ugovor);

  if (user) {
    setUser(user); // 修正语法错误,移除多余大括号

    bcrypt.genSalt(10, (err, salt) => {
      // 使用用户输入的原始密码password进行哈希,而非user.password
      bcrypt.hash(password, salt, (err, hash) => {
        postUser(user.id, hash, password, email).then((res) => {
          user = res.data;
          setPassword(prev => [...prev, hash]);
          setEmail(prev => [...prev, user]);
          history("/login");
          setError("");
          console.log("uspesna registracija");
        })
      })
    }) 
  } else {
    setError("Не постоји купац са унесеним бројем Уговора и мерила");
    return 0;
  }
});

2. 验证数据库存储的哈希值合法性

注册完成后直接查看数据库中user.password字段:

  • 正常bcrypt哈希值格式为$2b$10$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,长度固定为60字符左右
  • 若存储值不符合该格式,说明哈希过程未正确执行,或存储时被截断/篡改

3. 登录阶段逻辑顺序优化

原登录代码先执行密码比对,若用户不存在会直接报错,且比对失败后直接return,后续用户存在判断逻辑无法执行。应先判断用户是否存在,再做密码比对:

修正后的登录代码:

getAllUsers().then((res) => {
  let user = res.data.find((u) => u.ugovor === ugovor);

  if (!user) {
    setError("Broj Ugovora i lozinka se ne podudaraju");
    return;
  }

  const doesPasswordMatch = bcrypt.compareSync(password, user.password);
  if (!doesPasswordMatch) {
    console.log('compare not success');
    setError("Broj Ugovora i lozinka se ne podudaraju");
    return;
  }

  // 比对成功后执行登录逻辑
  console.log('compare success')
  setLogIn(true);
  setUser(user);
  history("/profile");
  console.log("uspesno ulogovan");
});

4. 确认bcrypt版本一致性

确保前后端(若前端使用bcrypt)使用的bcrypt版本完全一致,不同版本的哈希算法存在兼容性差异,会导致比对失败。


内容的提问来源于stack exchange,提问作者Petar Ostojic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:03:37