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

Argon2密码验证始终返回false的问题求助

Argon2密码验证始终返回false的问题求助

我遇到了一个特别头疼的问题:在注册用户时用Argon2对密码进行哈希存储,但是登录验证密码的时候,对比结果始终返回false。数据库里能看到存储的哈希密码,我也能拿到前端传过来的明文密码,可就是匹配不上。之前用bcryptjs的时候也出过一模一样的问题,换成Argon2还是没解决,我感觉自己两次都犯了同一个错误,已经卡了一整天了,实在没办法了来求助!

下面是我的注册和登录的核心代码:

exports.register = async (req, res) => {
  try {
    const { fullname, username, email, password } = req.body;
    const existingUser = await User.findOne({ email });
    if (existingUser)
      return res.status(400).json({ message: "User already exists!" });
    const trimmedPassword = password.trim();
    const hashedPassword = await argon2.hash(trimmedPassword);
    const newUser = new User({
      fullname,
      username,
      email,
      password: hashedPassword,
    });
    await newUser.save();
    console.log(newUser);
    res
      .status(201)
      .json({ message: "User created successfully. Welcome to InkSpace..." });
  } catch (error) {
    res.status(500).json({ message: "Error creating user", error });
  }
};
exports.login = async (req, res) => {
  try {
    const { email, password } = req.body;
    const plainPassword = password.trim();
    console.log("plain password",plainPassword);
    const user = await User.findOne({ email });
    const hashPassword = user.password;
    console.log(user);
    if (!user) {
      return res.status(400).json({ message: "Invalid email or password" });
    }
    console.log(hashPassword);
    const isMatch = await argon2.verify(hashPassword, plainPassword);
    console.log(isMatch)
    if (isMatch) {
      req.session.user = {
        userId: user._id,
        username: user.username,
      };
      console.log("Session data after login:", req.session.user);
      return res.status(200).json({ message: "Login successful" });
    } else {
      console.log("did not match")
      return res.status(400).json({ message: "Invalid email or password" });
    }
  } catch (error) {
    console.log("verify argon2 ", error);
    res.status(500).json({ message: "Error logging in", error });
  }
};

我已经做了这些排查尝试:

  • 对明文密码做了trim()处理,避免前后空格的干扰
  • 注册后打印了新用户信息,确认哈希后的密码确实被正确存储了
  • 登录时也打印了明文密码和数据库里的哈希密码,格式看起来是正常的

有没有大佬能帮我看看哪里出问题了?

备注:内容来源于stack exchange,提问作者Enes Şirin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:25:27