简体   繁体   English

Passport JWT:req.user 始终未授权

[英]Passport JWT : req.user is always Unauthorized

I have searched similar question on stack overflow , but any of one is not working for me , so i ask this question again.我在堆栈溢出上搜索过类似的问题,但没有一个对我有用,所以我再次问这个问题。

I am using passport-jwt to with express .我正在使用passport-jwt来使用express

I want to get logged in user id , to store it in other model.我想登录用户 id ,将其存储在其他模型中。 but every time I get 401 Unauthorized但每次我得到 401 Unauthorized

here is helpers/passport.js这是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);
        });
    })
  );
};

here is server.js这是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路线/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控制器/身份验证/user.js

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

When I tried with postman but not working .当我尝试使用邮递员但不工作时。

在此处输入图片说明

I have also tried with : ExtractJwt.fromAuthHeaderWithScheme('jwt') as it is upvoted in some questions , but it is not working .我也尝试过: ExtractJwt.fromAuthHeaderWithScheme('jwt')因为它在某些问题中得到了赞成,但它不起作用。

I am using我在用

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

please help me to solve this problem .请帮我解决这个问题。

I have solved above errors by replacing User.findById(jwt_payload.id) with我已经通过替换User.findById(jwt_payload.id)解决了上述错误
User.findById(jwt_payload._id)

here is updated passport.js这是更新的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);
        });
    })
  );
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM