如果用户名或密码不正确,该应用程序将正常运行。
但是如果输入的用户名正确并且没有输入密码,则会崩溃。
这是我在应用崩溃之前遇到的错误:
错误:非法 参数:未定义,_async处的字符串
user.js
module.exports.comparePassword = function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, (err, isMatch) =>{
if(err) throw err;
callback(null, isMatch);
});
}
users.js:
router.post('/authenticate/user', (req, res, next) =>{
const username = req.body.username;
const password = req.body.password;
User.getUserByUsername(username, (err, user) => {
if(err) throw err;
if(!user){
return res.json({success: false, msg: 'User Not Registered'});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if(err) throw err;
if(isMatch){
const token = jwt.sign({data: user}, config.secret, {
expiresIn : '6h'
});
res.json({
success: true,
token: 'JWT ' +token,
user:{
id: user._id,
username : user.username
}
});
} else {
return res.json({success: false, msg: 'Wrong Password'});
}
});
});
});
我应该在应用程序的前端添加验证以进行快速修复,还是一个好主意? 预先感谢。
答案 0 :(得分:0)
简单的解决方法是在与哈希进行比较之前检查“ candidatePassword”,如果为空则抛出错误。