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
相关产品推荐
相关产品推荐

