nodejs中的护照-jwt总是返回未经授权的

以下是演示凭证的示例代码:

var express=require('express'); var app=express(); var bodyparser=require('body-parser'); var passport=require('passport'); var morgan=require('morgan'); var jwt=require('jwt-simple'); app.use(bodyparser.urlencoded({extended:false})); app.use(bodyparser.json()); app.use(morgan('dev')); app.use(passport.initialize()); app.get('/',function(req,res){ res.send({'status':'success'}); }); var jwtStrategy=require('passport-jwt').Strategy; var ExtractJwt = require('passport-jwt').ExtractJwt; var opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); opts.secretOrKey = 'admin686d86'; opts.issuer = "localhost"; opts.audience = "localhost"; passport.use(new jwtStrategy(opts,function(jwt_payload, done){ console.log("In JWT Strategy"); console.log(jwt_payload); return done(null,{id:203}); })); app.get('/login',function(req,res){ var token=jwt.encode({id:203},opts.secretOrKey); res.send({success:true,token:token}); }); app.get('/dashboard',passport.authenticate('jwt', { session: false}),function(req,res){ console.log(req.headers); console.log(jwt.decode(req.headers.authorization,opts.secretOrKey)); res.send({status:'success'}); }); app.listen(5000); 

当我尝试login时,我成功地获得了一个令牌,但是当我使用该令牌并将其粘贴到头部时,我就会被授权。 它甚至没有在控制台中打印“在智威汤逊策略”。 但是当我删除passport.authenticate('jwt', { session: false})它打印数据。 我知道有一些愚蠢的错误,但不知道在哪里。 我在node.js是全新的,所以任何帮助将不胜感激。

您在令牌创build过程中忘记添加受众群体和发行人:

 app.get('/login', function(req, res){ var token = jwt.encode({ id: 203, aud: 'localhost', iss: 'localhost' }, opts.secretOrKey); res.send({ success: true, token: token }); }); 

而不是ExtractJwt.fromAuthHeader() ,请尝试使用extractJwt.fromAuthHeaderWithScheme('jwt') 。 这应该做的魔术。