Как разобрать JWT с express? - PullRequest
       14

Как разобрать JWT с express?

1 голос
/ 30 апреля 2020

я хочу получить доступ к телу json JWT, который я прочитал с node.js и паспортом.

const passport = require('passport');
passport.use(new JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate('JWT', {session: false}));

app.use(checkAuth);
function checkAuth(req: express.Request, res: express.Response, next: express.NextFunction) {
  console.log(req);
  return next();
}

Когда я просто регистрирую req, это на самом деле не выглядит как json. Поэтому мне интересно, как я могу разобрать объект req в json? У вас есть какие-нибудь намеки? Спасибо!

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы используете паспорт js вместе с passport-jwt. Посмотрите еще раз на документацию о том, как эта стратегия «извлекает» токен JWT (особенно «полезную нагрузку», которая идет с ним) из запроса. Документация Passport-JWT

const JwtStrategy = require('passport-jwt').Strategy,
      ExtractJwt = require('passport-jwt').ExtractJwt;

const opts = {
   jwtFromRequest : ExtractJwt.fromAuthHeaderAsBearerToken(),
   secretOrKey : 'secret',
   issuer : 'accounts.examplesoft.com',
   audience : 'yoursite.net'
}

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {

    // jwt_payload is the payload that you earlier included 
    // in the jwt token, when you created the jwt token.

    // Here you can verify the request,
    // For example, check database if user exists. 

    User.findOne({id: jwt_payload.sub}, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            return done(null, user);
        } else {
            return done(null, false);
            // or you could create a new account
        }
    });
}));

При этом обычно не требуется дополнительная функция "checkAuth". Используйте это так:

app.use(passport.authenticate('JWT', {session: false}));

// OR

app.post('/protected', passport.authenticate('JWT', {session: false}), (req, res) => {

   // this will only fire when authentication was successfull
   // req.user will hold whatever you return in the callback from
   // the strategy function. 

});

1 голос
/ 30 апреля 2020

req является сложным Express 'объектом типа Request. Если вы хотите получить доступ к заголовкам, где JWT передается большую часть времени, вам нужно использовать:

req.get('Authorization') // or any other header: 'Content-Type', etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...