#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){