nodejs中的passport-jwt始终返回未授权状态

时间:2016-09-02 17:06:53

标签: node.js passport.js

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

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中是全新的,所以任何帮助都会受到赞赏。

2 个答案:

答案 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')。这应该是神奇的。