即使密码匹配,bcrypt也会失败>



使用bcryptjs比较密码时出现问题。

环境:

节点:v16.8.0

bcryptjs:2.4.3

https:1.0.0-(网站/页面都是https,以防有任何不同(。

这就是代码的样子:

// Login Function
router.post('/login', async (req, res) => {
const { password, email } = req.body;
let user = users.find((user) => {
return user.email === email
});
// Checks that the user is already registered
if (!user) {
return res.status(400).json({
"errors": [
{
"msg": "Invalid Credentials"
}
]
})
};
// Compare Passwords
console.log('Checking if passwords matchn')
let isMatch = await bcrypt.compare(password, user.password);
console.log('Displaying Password variables:')
console.log(`Just password Variable: ${password}`)
console.log(`User.Password variable: ${user.password}`)
console.log('nDisplaying Value of isMatch:')
console.log(`${isMatch}n`)
if (!isMatch) {
console.log(`The Passwords dont match! Closing Connection`)
return res.status(400).json({
"errors": [
{
"msg": "The Passwords do not match!"
}
]
});
} else {
console.log(`Moving on to the JWT thingy`)
const token = await jwt.sign({
email
}, process.env.JWT_SECRET, {
expiresIn: 360000
})
return res.json({ token })
};
});

这是所有控制台的输出。logs:


服务器正在端口3443 上运行

检查密码是否匹配(这是进行bcrypt.compare的部分(

显示密码变量:

仅密码变量:$2a$10$mXTzEmSqPoaEsPbvM3P/o.cl7VyMhVq7S37u8Lpo8gGr6i0tS8OxS用户密码变量:$2a$10$mXTzEmSqPoaEsPbvM3P/o.cl7VyMhVq7S37u8Lpo8gGr6i0tS8OxS

显示isMatch的值:错误

密码不匹配!关闭连接


我只是不明白为什么isMatch返回false,console.log的输出完全相同,但isMatch的值返回false,因此遵循!isMatch路由,而不是进入JWT部分。

我试过使用bcryptjs.hashSync((和bcryptjs.compareSync,但没有区别。

有什么想法吗?干杯M.

bcrypt.compare采用纯文本密码和密码哈希。您的代码正在传递两个密码哈希。所以字符串是相等的,但是第一个字符串的散列不等于第二个字符串。

// Login Function
router.post('/login', async (req, res) => {
const { password, email } = req.body;

let user = users.find((user) => {
return user.email === email
});
// Checks that the user is already registered
if (!user) {
return res.status(400).json({
"errors": [
{
"msg": "Invalid Credentials"
}
]
})
};

// Compare Passwords
console.log('Checking if passwords matchn')

if (password === user.password) {

console.log('Displaying Password variables:')
console.log(`Just password Variable: ${password}`)
console.log(`User.Password variable: ${user.password}`)

console.log('nDisplaying Value of isMatch:')
console.log(`${isMatch}n`)

if (!isMatch) {
console.log(`The Passwords dont match! Closing Connection`)
return res.status(400).json({
"errors": [
{
"msg": "The Passwords do not match!"
}
]
});
}
} else {
console.log(`Moving on to the JWT thingy`)
const token = await jwt.sign({
email
}, process.env.JWT_SECRET, {
expiresIn: 360000
})
return res.json({ token })
};
});

我已经将您的代码编辑为不为bcrypt.compare,因为如上面的答案所述,compare采用纯文本字符串,并将其与bcrypt哈希版本进行比较。因此,由于两者都是散列的,一个正则if语句就足够了。如果我把关闭的if支架放错了的位置,请原谅我

相关内容

  • 没有找到相关文章

最新更新