如何解码令牌登录后使用护照,智威汤逊
问题描述:
我编码具有的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()
你意味着我必须使用'饼干Parser'模块解码令牌? –
不,我的意思是你passport.authenticate()应遵循相同的风格的cookie解析器:返回一个函数 – jiajianrong