Сбой приложения узла из-за пустой строки в качестве пароля

#node.js #express #bcrypt

#node.js #экспресс #bcrypt

Вопрос:

Приложение работает нормально, если имя пользователя или пароль неверны.

Но сбой, если имя пользователя введено правильно, а пароль не введен.

Это ошибка, которую я получаю перед сбоем приложения:
Ошибка: Недопустимые аргументы: не определено, строка в _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'});
        }
    });
});
});
  

Должен ли я добавить проверку во внешнем интерфейсе приложения для быстрого исправления или это плохая идея?
Заранее спасибо.

Комментарии:

1. ДА.. вы должны добавить проверку во внешнем интерфейсе, а также на серверной части .. попробуйте express-validator.github.io/docs

Ответ №1:

Простым решением было бы проверить «candidatePassword» перед сравнением с хэшем и, если он пуст, выдать ошибку.