简体   繁体   English

Node Express:未执行Passport JWT中间件

[英]Node Express: Passport JWT middleware not being executed

When I use 'passport.authenticate('jwt', { session: false })' in a route, it returns 'Unauthorized'. 当我在路由中使用'passport.authenticate('jwt',{session:false})'时,它将返回'Unauthorized'。 The passport middleware seems not working. 护照中间件似乎不起作用。 I don't know what is wrong! 我不知道怎么了! In the header I'm using the 'Authorization: JWT MY_TOKEN'. 在标题中,我使用的是“授权:JWT MY_TOKEN”。

app.js file app.js文件

// ...code

const app = express();
app.use(bodyParser.json());
app.use(passport.initialize());
require('./config/passport')(passport); // passport middleware file

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

.

Passport middleware file: 护照中间件文件:

const { Strategy, ExtractJwt } = require('passport-jwt');
const User = require('../models/User');
const keys = require('./keys');

module.exports = (passport) => {
    const opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = 'MYSECRETKEY';

    // HERE IS EXECUTED! <<<<<<<<

    passport.use(new Strategy(opts, function(jwt_payload, done) {
        // HERE IS NOT BEING EXECUTED! <<<<<<<<

        User.findOne({_id: jwt_payload.id}, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                return done(null, user);
            } else {
                return done(null, false);
            }
        });
    }));
}

.

Login route (creating the token): 登录路径(创建令牌):

router.post('/login', (req, res, next) => {
  const { email, } = req.body;

  User.findOne({ email: email }, { password: 0 }, (errQuery, resUser) => {
    const token = jwt.sign({_id: resUser.id}, 'MYSECRETKEY');

    const responseData = {
      status: true,
      token: `JWT ${token}`
    };

    res.send(responseData);
  });
});

The issue is this line: 问题是此行:

opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();

Because you're calling that configuration option, your header needs to look like: 因为您正在调用该配置选项,所以标头应如下所示:

Authorization: Bearer MY_TOKEN

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

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