ошибка сброса пароля в express .js / node. js - PullRequest
0 голосов
/ 26 мая 2020

Когда я отправляю запрос POST, пароль фактически меняется, но resetToken не меняется в соответствии с кодом.

exports.postSaveNewPassword = (req,res,next)=>{
    const errors = validationResult(req)
    if(!errors.isEmpty()){
        return next(errors.array())
    }
    User.findOne({_id:req.body.id})
    .then(user=>{
        return bcrypt.hash(req.body.password,12)
        .then(pass=>{
            user.password = pass;
            user.resetTokenExpiration = undefined;
            user.resetToken = undefined; // this line is giving error
            return user.save()
        })
        .then(()=>{
            res.redirect("/")
        })
    })
    .catch(err=>{
        next(err)
    })
}

Это ошибка, которую я получаю:

TypeError: Cannot set property 'resetToken' of null
    at E:\backhand\authentication\controllers\auth.js:117:29

1 Ответ

0 голосов
/ 26 мая 2020

Примечание: я предполагаю, что вы здесь что-то перепутали, и в коде, которому принадлежит это точное сообщение об ошибке, сначала была строка user.resetToken = undefined;, а не user.password = pass;. Все остальное не имеет смысла, потому что user не может быть сначала объектом, а затем внезапно обнуленным.

Проблема: user имеет значение null. Следовательно, вы, по сути, делаете null.resetToken = undefined, что невозможно, потому что, как говорилось в ошибке, компьютер «не может установить свойство 'resetToken' равным null».

Вероятно, это так, потому что ни один пользователь с данным ID был найден. (Вы всегда должны проверять это, даже если вы думаете, что обычно этого не должно происходить, потому что вы не можете предотвратить отправку неверных идентификаторов на ваш сервер.)

Вы должны проверить, какое значение имеет req.body.id. Ваш веб-интерфейс неправильно отправляет этот параметр (или он неправильно отправляет тип содержимого, поэтому req.body может быть строкой или буфером вместо объекта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...