节点应用程序因空字符串作为密码而崩溃

问题描述 投票:1回答:1

如果用户名或密码不正确,应用程序可以正常工作。

但如果输入的用户名正确且未输入密码,则会崩溃。

这是我在应用程序崩溃之前遇到的错误: 错误:非法参数:未定义,_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'});
        }
    });
});
});

我应该在应用程序的前端添加验证以进行快速修复,还是不是一个好主意?提前致谢。

node.js express bcrypt
1个回答
0
投票

简单的解决方法是在比较哈希之前检查“candidatePassword”,如果是空则抛出错误。

© www.soinside.com 2019 - 2024. All rights reserved.