以下是带有演示凭证的示例代码:
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);
当我尝试登录时,我成功获得了一个令牌,但是当我使用该令牌并粘贴到标头中时,我得到了未经授权。它甚至不打印"在JWT战略"在控制台。但当我删除passport.authenticate('jwt', { session: false})
时,它会打印数据。我知道有一些愚蠢的错误,但不知道在哪里。我在node.js中是全新的,所以任何帮助都会受到赞赏。
答案 0 :(得分:1)
您忘记在令牌创建期间添加受众和发布者:
app.get('/login', function(req, res){
var token = jwt.encode({
id: 203,
aud: 'localhost',
iss: 'localhost'
}, opts.secretOrKey);
res.send({ success: true, token: token });
});
答案 1 :(得分:0)
而不是ExtractJwt.fromAuthHeader()
,请尝试使用extractJwt.fromAuthHeaderWithScheme('jwt')
。这应该是神奇的。