Igo*_*ins 8 node.js express jwt passport.js
我想我可以使用或不使用令牌访问路由器.如果用户有令牌,请给我req.user
像这样:
router.get('/profile', function(req, res) {
if(req.user) { // or if (req.isAuthenticated())
res.send('logged')
} else {
res.send('not loggedIn')
}
});
Run Code Online (Sandbox Code Playgroud)
我的应用:
var JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
opts.secretOrKey = 'sh';
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
// or you could create a new account
}
});
}));
Run Code Online (Sandbox Code Playgroud)
如果我尝试访问/profile没有令牌,工作正常.但是,当尝试使用/profile标题中的标记访问时,会给我not loggedIn
即使没有令牌我也想访问它,如果我提供了一个toke,请给我用户.
ps:已经passport.authenticate('jwt')在路线和工作中使用过.如果我给令人让我访问,如果不给我未经授权.
按如下方式更改路由器
router.get('/profile', authenticateUser(), profile());
function authenticateUser(req, res, next) {
// your strategy here...
if (authenticated) {
req.user = user;
next();
} else {
return res.status(401).send("Not authenticated");
}
}
function profile(req, res, next) {
var userId = req.user.id;
User.findById(userId, function(err, user) {
if (err) { return res.status(500).json(err); }
return res.json(user);
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |