【问题标题】:Passport JWT : req.user is always UnauthorizedPassport JWT:req.user 始终未授权
【发布时间】:2019-03-12 23:46:27
【问题描述】:

我已经搜索过关于堆栈溢出的类似问题,但其中任何一个都不适合我,所以我再次问这个问题。

我正在使用passport-jwtexpress

我想登录用户 id ,将其存储在其他模型中。但每次我得到 401 Unauthorized

这里是 helpers/passport.js

const options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();

options.secretOrKey = configuration.secret_key.JWTsecretkey;

module.exports = passport => {
  passport.use(
    new JwtStrategy(options, (jwt_payload, done) => {
      console.log('jwt_payload ==',jwt_payload);
      User.findById(jwt_payload.id)
        .then(user => {
          if (user) {
            return done(null, user);
          }
          return done(null, false);
        })
        .catch(err => {
          console.log(err);
          return done(err, false);
        });
    })
  );
};

这里是 server.js

global.express = require('express');
global.app = express();
global.passport = require('passport');
global.jwt = require('jsonwebtoken');
global.JwtStrategy = require('passport-jwt').Strategy;
global.ExtractJwt = require('passport-jwt').ExtractJwt;
global.requireTree = require('require-tree')
global.controllers = requireTree(rootdir+'/controllers')
global.routes=requireTree(rootdir+'/routes')
global.helpers = requireTree(rootdir + '/helpers')

app.use(passport.initialize())
require(rootdir+'/helpers/passport')(passport)

app.use('/api/auth',routes.api.auth);

app.listen(8888)

routes/api/auth.js

 const router=express.Router();

 router.get('/user', passport.authenticate('jwt', { session: false }),controllers.auth.user);
  module.exports =router

controllers/auth/user.js

module.exports=(req,res)=>{
    res.json({
        user:req.user
      });
}

当我尝试使用邮递员但不工作时。

我也尝试过:ExtractJwt.fromAuthHeaderWithScheme('jwt') 因为它在某些问题中被赞成,但它不起作用。

我正在使用

"护照": "^0.4.0" , "passport-jwt": "^4.0.0" ,
"jsonwebtoken": "^8.3.0"

请帮我解决这个问题。

【问题讨论】:

    标签: node.js express jwt passport.js passport-jwt


    【解决方案1】:

    我已经通过替换解决了上述错误 User.findById(jwt_payload.id)
    User.findById(jwt_payload._id)

    这里更新passport.js

    const options = {};
    options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    options.secretOrKey = configuration.secret_key.JWTsecretkey;
    
    module.exports = passport => {
      passport.use(
        new JwtStrategy(options, (jwt_payload, done) => {
          console.log('jwt_payload ==',jwt_payload);
          User.findById(jwt_payload._id)
            .then(user => {
              if (user) {
                return done(null, user);
              }
              return done(null, false);
            })
            .catch(err => {
              console.log(err);
              return done(err, false);
            });
        })
      );
    };
    

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 2018-02-02
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2016-07-29
      • 2019-12-19
      相关资源
      最近更新 更多