NodeJS jwtStrategy nécessite une fonction pour récupérer jwt de l'erreur requests

j'ai appris le tutoriel de https://devdactic.com/restful-api-user-authentication-1/. Mais je suis d'erreur sur cette partie

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

Voici l'erreur quand j'exécute le serveur "node".js"

/home/chibi/Documents/connect/project/node_modules/passport-jwt/lib/strategy.js:39
throw new TypeError('JwtStrategy requires a function to retrieve jwt f
          ^
TypeError: JwtStrategy requires a function to retrieve jwt from requests (see option jwtFromRequest)
at new JwtStrategy (/home/chibi/Documents/connect/project/node_modules/passport-jwt/lib/strategy.js:39:15)
at module.exports (/home/chibi/Documents/connect/project/config/passport.js:10:16)
at Object.<anonymous> (/home/chibi/Documents/connect/project/server.js:30:29)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3

Quelle est la solution?

16
demandé sur Thomas Bormans 2016-04-10 21:26:47

2 réponses

je pense que vous êtes en utilisant le passeport de l'-jwt' 2.0.0 qui a ajouté quelques modifications importantes à partir de v1.x.x utilisé par le tutoriel. Dans le opts vous devez passer une autre option jwtFromRequest pour lui dire où chercher la charge utile jwt.

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
var opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findOne({id: jwt_payload.id}, 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
        }
    });
}));
40
répondu hassansin 2016-08-21 18:07:28

documents officiels, lors de la migration à partir de 2.x à 3.x utiliser JWT vous devez utiliser:

ExtractJwt.fromAuthHeaderWithScheme('jwt')

à la place de l'ancien:

ExtractJwt.fromAuthHeader()
22
répondu DLara 2017-09-25 00:06:38