fromAuthHeaderAsBearerToken не работает в NODE - PullRequest
0 голосов
/ 13 мая 2018

Я выполнил следующие действия для проверки подлинности паспорта в узле.

1) Я использую jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),

module.exports = function(passport){
    var opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = config.secret;
    console.log('Inside passport');
    //opts.issuer = 'accounts.examplesoft.com';
    //opts.audience = 'yoursite.net';
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        console.log('Payload :: '+jwt_payload._doc);
        User.getUserById({id: jwt_payload._doc._id}, 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
            }
        });
    }));

2) Вызов метода следующим образом:

userExpressRoutes.route('/profile')
    .get(passport.authenticate('jwt', { session: false }), function (req, res) {  });

3) Установка заголовка в Ppostman, например: Authorization:Bearer {token}

Заголовок пост-аутентификации

4) Дает undefined полезную нагрузку

Payload :: undefined
TypeError: Cannot read property '_id' of undefined

Чего здесь не хватает для получения Jwt_payload?

Может кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Ну, по моему мнению "fromAuthHeaderAsBearerToken ()" не работает. Не знаю, почему они не удалили его !!!!!!Хорошо, мы все еще можем использовать более простые версии, мы все еще можем "ExtractJwt.fromHeader ()" и "ExtractJwt.fromUrlQueryParameter ()" и протестировать его в Использование POSTMAN,

для пути 01: «ExtractJwt.fromUrlQueryParameter ()» щелкните по параметрам: в поле имени типа «secret_token» в поле значения вставьте полученный токен

и для пути 02: «ExtractJwt.fromHeader ()» нажмите «заголовок»: в поле имени типа «auth» и поле значения вставьте полученный токен.

var JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt,
User = require('../models/user'),
keys = require('./keys');


module.exports = (passport)=> {
    passport.use(new JwtStrategy({
        secretOrKey   : keys.jwtkey.JWT_KEY,
        //way 01
        jwtFromRequest: ExtractJwt.fromUrlQueryParameter('secret_token')
      // or way 02: 
      //ExtractJwt.fromHeader('auth')
    },
    function (jwtPayload, done) {

console.log(JSON.stringify(jwtPayload));
        return User.findById({_id:jwtPayload._id}, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                console.log('User is '+ user);
                return done(null, user);
            } else {
                return done(null, false);
                // or you could create a new account
            }
        });
    }

));
};
0 голосов
/ 16 мая 2018

Я решил эту проблему с помощью приведенного ниже фрагмента кода.Спасибо всем за поддержку ...

   const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/User');
const config = require('../config/DB');

module.exports = function(passport){
  let opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = config.secret;
  passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
    User.findById(jwt_payload.data._id, (err, User) => {
      if(err){
        return done(err, false);
      }

      if(User){
        return done(null, User);
      } else {
        return done(null, false);
      }
    });
  }));
}
...