如何解码令牌登录后使用护照,智威汤逊

如何解码令牌登录后使用护照,智威汤逊

问题描述:

我编码具有的loggedIn用户与护照智威汤逊如下ID令牌:如何解码令牌登录后使用护照,智威汤逊

var JwtStrategy =require('passport-jwt').Strategy; 
ExtractJwt = require('passport-jwt').ExtractJwt; 
var User   =require('../app/models/usermodel'); 
var config  =require('../config/database'); 

module.exports=function(passport){ 
    var opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    User.findOne({id: jwt_payload.id}, function(err, user) { 
      if (err) { 
       return done(err, false); 
      } 
      if (user) { 
       done(null, user); 
      } else { 
       done(null, false); 
      } 
     }); 
    })); 
}; 

和登录路由API:

apiRoutes.put('/login', function(req, res, next){ 
    User.findOne({email:req.body.email}, function(err, user){ 
    bcrypt.compare(req.body.password, user.password, function(err, result){ 
     if(result){ 
     var token=jwt.encode(user, config.secret); 
     return res.json({token:token}); 
     }else{ 
     return res.json("Incorrect Email and Password") 
     } 
    }) 
    }) 
}); 

现在我想要得到的loggedIn用户在仪表板页面信息。对此我想解码的令牌,并试图通过如下仪表板API航线增加了身份验证来获得用户的所有信息:

apiRoutes.get('/dashboard', passport.authenticate('jwt', { session: false}), function(req, res) { 
    console.log('User info: ' + req.user._id + '.'); 
    }); 

这上面的代码我在教程中解码令牌。 所以,当我打这个/api/dashboard网址的显示浏览器控制台错误。

GET http://localhost:3000/api/dashboard 401 (Unauthorized) 

我不知道如何解码令牌和获取用户信息。请帮我解决这个问题。

帮助赞赏。 感谢

我敢肯定,如果我是对的,但我觉得你有错误概念中间件快递。我为你找到一个例子。

var cookieParser = require('cookie-parser'); 
app.use(cookieParser()); 

此代码将使用cookieParser()的返回值来分析cookie。这里是cookieParser的源代码。

exports = module.exports = function cookieParser(secret, options){ 
    return function cookieParser(req, res, next) { 
    if (req.cookies) return next(); 
    var cookies = req.headers.cookie; 
    // main logic omits 
    next(); 
    }; 
}; 

所以,你可能会看到cookieParser()的结果 - 这是一种中间件 - 是req, res, next功能是参数。并且还要求next()让下一个中间件或在你的情况,function(req, res) { console.log('User info: ' + req.user._id + '.'); }运行。

所以在你passport-jwt它应该返回与参数req, res, next的功能,并调用next()

+0

你意味着我必须使用'饼干Parser'模块解码令牌? –

+0

不,我的意思是你passport.authenticate()应遵循相同的风格的cookie解析器:返回一个函数 – jiajianrong