以下是带有演示凭据的示例代码:
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);当我尝试登录时,我成功地获得了一个令牌,但当我使用该令牌并粘贴在标题中时,我得到了未经授权的结果。它甚至不会在控制台中打印"In JWT Strategy“。但是当我删除passport.authenticate('jwt', { session: false})时,它会打印数据。我知道有一些愚蠢的错误,但不知道在哪里。我是一个全新的node.js新手,因此任何帮助都将不胜感激。
发布于 2016-09-03 14:54:57
令牌创建过程中忘记添加受众和颁发者:
app.get('/login', function(req, res){
var token = jwt.encode({
id: 203,
aud: 'localhost',
iss: 'localhost'
}, opts.secretOrKey);
res.send({ success: true, token: token });
});发布于 2017-09-20 03:46:50
尝试使用extractJwt.fromAuthHeaderWithScheme('jwt')而不是ExtractJwt.fromAuthHeader()。这应该会有魔力。
https://stackoverflow.com/questions/39297565
复制相似问题