Проверьте токен jwt с помощью Mon goose .findOne () - PullRequest
1 голос
/ 26 мая 2020

Я следую руководству, в котором используются node, mon goose и jwt. Мне просто интересно узнать об одной команде ниже.

Почему в учебнике используется команда user.findOne (). ?

userSchema.statics.findByToken = function(token,cb){
var user = this;

jwt.verify(token,process.env.SECRET,function(err,decode){
    user.findOne({"_id":decode,"token":token},function(err,user){
        if(err) return cb(err);
        cb(null,user);
    })
})
}

Разве токен еще не проверен с помощью jwt.verify ()?

Зачем нужен findOne ()? Эта команда findOne () создает впечатление, что существует более одного пользователя. Поскольку на входе используется только один токен.

Почему они просто не возвращают «_id»?

Кстати, токен создается следующим образом:

userSchema.methods.generateToken = function(cb){
var user = this;
var token = jwt.sign(user._id.toHexString(),process.env.SECRET)

user.token = token;
user.save(function(err,user){
    if(err) return cb(err);
    cb(null,user);
})
}

и вот как .findToken () используется в аутентификации маршрута:

const { User } = require('./../models/user');

let auth = (req,res,next) => {
    let token = req.cookies.w_auth;

User.findByToken(token,(err,user)=>{
    if(err) throw err;
    if(!user) return res.json({
        isAuth: false,
        error: true
    });

    req.token = token;
    req.user = user;
    next();
})

}


module.exports = { auth }

1 Ответ

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

Это дополнительная мера безопасности. Допустим, администратор по какой-то причине удалил пользователя, чтобы пользователь не мог получить доступ к приложению. Но если у пользователя все еще есть действующий токен, он / она может продолжить доступ к приложению. Это неприемлемо.

Поэтому в критических приложениях полезно проверить, действительно ли пользователь существует в базе данных.

И чтобы сделать его более безопасным, нам также нужно проверить, токен был выпущен до смены пароля. Это может быть полезно, если пользователь заподозрил или заметил, что кто-то украл его / ее пароль, поэтому после изменения пароля пользователем токены, выпущенные до смены пароля, должны быть аннулированы.

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