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')
。 这应该做的魔术。
- {
- 在服务器端使用Passport-jwt呈现Express / React应用程序
- 如何在login后请求用户数据,Node.JS
- 诺言创build,但不是从返回。 Knex / Bookshelf
- 会话不会保存在会话variables中。 导航后,req.user不存在
- 脸书authentication与护照。 无法读取未定义错误的属性“0”
- 如何在没有会话的Facebook Passport之后redirect到之前的URL
- 未处理的拒绝TypeError:dbUser.validPassword不是函数Sequelize Node React Passport
- Express-mysql-session阻止passport deserializeUser运行