Я следую руководству, в котором используются 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 }