Chcę, abym mógł uzyskać dostęp do routera z tokenem lub bez niego. Jeśli użytkownik posiada żeton, niż dać mi req.user
Trasa dostępna z tokenem lub bez niego JWT + PASSPORT
tak:
router.get('/profile', function(req, res) {
if(req.user) { // or if (req.isAuthenticated())
res.send('logged')
} else {
res.send('not loggedIn')
}
});
moim app:
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
}
});
}));
jeśli próbuję uzyskać dostęp /profile
bez tokena, działa bez zarzutu. Ale, gdy próby uzyskania dostępu /profile
z tokena w nagłówku dać mi not loggedIn
chcę uzyskać do niego dostęp, nawet bez tokena, a jeśli dostarczono toke, daj mi użytkownikowi.
ps: Przetestowano już przy użyciu passport.authenticate('jwt')
w trasie i działa. Jeśli dam token, daj mi dostęp, jeśli nie daj mi nieuprawnionego.