bcrypt.compare 总是 returns 错误
bcrypt.compare always returns false
我正在尝试启动登录功能,但是当我尝试将密码与散列密码进行比较时,它总是 returns false
这是我的 registerUser 函数,它保存散列
const registerUser = async (request, response) => {
const hashedPassword = await bcrypt.hash(request.body.password, 12)
const user = new UserModel({
username: request.body.username,
password: hashedPassword
});
try {
const databaseResponse = await user.save();
response.status(201).send(databaseResponse);
} catch (error) {
response.status(500).send({message: error.message});
}
};
这是保存比较的登录函数
const login = async (request, response) => {
try{
const user = await UserModel.findOne({username: request.body.username})
if(!user) return response.status(403).send('no user with name ' + request.body.username + ' found');
const isPassValidated = await bcrypt.compare(request.body.password, user.password)
if(!isPassValidated) return response.status(403).send('wrong password');
response.status(200).send('yay');
} catch(error){
response.status(500).send({message: error.message});
}
}
当我 console.log request.body.password 和 user.password 哈希字符串等于未哈希字符串所以它应该 return true
散列后的字符串与保存在数据库中的字符串相同
代码看起来不错。您的数据库中是否有多个用户使用相同的用户名?生成的散列应该是:b$jgrLYOqnHnJGszlpgo26QuaT29tdxBFguyIttSNOIy/8go1viRrYC
我刚找到问题,谢谢你的帮助。在 userSchema 中,密码是 lowercase:true,这导致了问题...
我正在尝试启动登录功能,但是当我尝试将密码与散列密码进行比较时,它总是 returns false
这是我的 registerUser 函数,它保存散列
const registerUser = async (request, response) => {
const hashedPassword = await bcrypt.hash(request.body.password, 12)
const user = new UserModel({
username: request.body.username,
password: hashedPassword
});
try {
const databaseResponse = await user.save();
response.status(201).send(databaseResponse);
} catch (error) {
response.status(500).send({message: error.message});
}
};
这是保存比较的登录函数
const login = async (request, response) => {
try{
const user = await UserModel.findOne({username: request.body.username})
if(!user) return response.status(403).send('no user with name ' + request.body.username + ' found');
const isPassValidated = await bcrypt.compare(request.body.password, user.password)
if(!isPassValidated) return response.status(403).send('wrong password');
response.status(200).send('yay');
} catch(error){
response.status(500).send({message: error.message});
}
}
当我 console.log request.body.password 和 user.password 哈希字符串等于未哈希字符串所以它应该 return true
散列后的字符串与保存在数据库中的字符串相同
代码看起来不错。您的数据库中是否有多个用户使用相同的用户名?生成的散列应该是:b$jgrLYOqnHnJGszlpgo26QuaT29tdxBFguyIttSNOIy/8go1viRrYC
我刚找到问题,谢谢你的帮助。在 userSchema 中,密码是 lowercase:true,这导致了问题...