gpt4 book ai didi

node.js - 有或没有 token JWT+PASSPORT 可用的路线

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:02 25 4
gpt4 key购买 nike

我希望我可以使用或不使用 token 访问路由器。如果用户有 token ,请给我 req.user

像这样:

router.get('/profile', function(req, res) {
if(req.user) { // or if (req.isAuthenticated())
res.send('logged')
} else {
res.send('not loggedIn')
}
});

我的应用:

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
}
});
}));

如果我尝试在没有 token 的情况下访问 /profile,工作正常。但是,当尝试使用 header 中的 token 访问 /profile 时,我not loggedIn

即使没有 token ,我也想访问它,如果我提供了 token ,请给我用户。

ps: 已经在路由中使用 passport.authenticate('jwt') 进行了测试并且有效。如果我给 token 让我访问,如果不给我授权。

最佳答案

我是这样做的:

const passport = require('passport');

const optionalJwt = function (req, res, next) {
if (req.headers['authorization']) {
return passport.authenticate('jwt', { session: false })(req, res, next);
}
return next();
};

app.get('/my/route', optionalJwt, function (req, res, next) {
if (req.isAuthenticated()) {
res.send('My name is ' + req.user.name);
} else {
res.send('I\'m not authenticated :(');
}
});

如果包含 auth header 但 token 已过期或无效,它仍然会失败,但它可能会达到目的。对我来说确实如此。

关于node.js - 有或没有 token JWT+PASSPORT 可用的路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41755441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com