Получение ошибки ввода для моего пароля ПОСЛЕ неудачной попытки входа в систему

#javascript

#javascript

Вопрос:

Как только я зарегистрируюсь на своем сайте, я смогу нормально войти в систему и выйти из системы, и если я ничего не введу в поля входа, он выдает мою ошибку, в которой говорится, что требуется пароль и адрес электронной почты, и я могу нормально перезагрузить страницу входа, но если я попытаюсь войти в систему с неправильным паролем, ошибка для этого выдает и сообщает неверный адрес электронной почты или пароль, НО как только я пытаюсь вернуться на страницу входа в систему или ЛЮБУЮ другую страницу на моем сайте, в моей консоли появляется сообщение

throw er; // Необработанное событие ‘error’ ^

Ошибка типа: не удается прочитать свойство ‘password’ с нулевым значением

в нем говорится, что ошибка типа находится в строке bcrypt.compare.

 userSchema.statics.authenticate = function(email, password, callback){
    User.findOne({email: email})
    .exec(function(error, user){
        if(error){
            callback(error)
        }else if(!user){
        const err = new Error('User not found.')    
        err.status = 401
        callback(err)
        }
        bcrypt.compare(password, user.password, function(error, result){
            if(result === true){
                return callback(null, user)
            }else{
                return callback()
            }
        })
    })

}
 

Это мой маршрут входа в систему

 router.post('/login', (req, res, next)=>{
  if(req.body.email amp;amp; req.body.password){

    User.authenticate(req.body.email, req.body.password, function(error, user){
      if( error || !user){
        const err = new Error("Email or password is incorrect.")
        err.status = 401
        next(err)
      }else{

        req.session.userId = user._id;
        res.redirect('/profile')
      }
    });

  }else{
    const err= new Error('Email and Password required.')
    err.status = 401
    next(err)
  }

})
 

Все работает отлично, единственный раз, когда происходит сбой сервера / сайта, — это когда я пытаюсь войти в систему с НЕПРАВИЛЬНЫМ паролем, затем он выдает ошибку, а затем после выдачи ошибки сайт выходит из строя. Если я не ввожу адрес электронной почты или пароль, он выдает ошибку для этого и продолжает нормально работать, и снова я могу войти в систему с правильным адресом электронной почты и паролем, выйти из системы и зарегистрироваться просто отлично.

Узел / экспресс для меня новый, поэтому простите меня за любые ошибки новичков. Я пытаюсь научиться правильно отлаживать в express/Node.js .

Спасибо за любую помощь!

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

1. Не могли бы вы опубликовать свой интерфейс, когда вы входите в систему, используете ли вы ajax-запрос или перезагружаете всю страницу? Похоже, что в какой-то момент ваша форма повторно отправляется с недопустимыми значениями, из-за чего происходит сбой.

2. @JudeFernandes Спасибо за помощь, но мбойко ответил за меня, и теперь все работает!

Ответ №1:

Проблемная строка будет выполнена независимо user от того, определена она или нет (и доступ undefined.password приведет к сбою скрипта). Вы можете защитить его с помощью else :

         }else if(!user){
           const err = new Error('User not found.')    
           err.status = 401
           callback(err)
        } else {
           bcrypt.compare(password, user.password, function(error, result){