node jsonwebtoken instalar example node.js passport.js

node.js - jsonwebtoken - NodeJS jwtStrategy requiere una función para recuperar jwt del error de solicitudes



passport js (2)

Aprendí el tutorial de https://devdactic.com/restful-api-user-authentication-1/ . Pero tengo error en esta parte

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

Aquí está el error cuando ejecuto el nodo "server.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

¿Cuál es la solución?


Creo que estás usando ''passport-jwt'' 2.0.0 que ha agregado algunos cambios importantes en v1.xx utilizados por el tutorial. En las opciones, jwtFromRequest pasar otra opción jwtFromRequest para decirle dónde buscar la carga útil 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 } }); }));


De la documentación oficial , al migrar de 2.x a 3.x utilizando JWT, debe usar:

ExtractJwt.fromAuthHeaderWithScheme(''jwt'')

en lugar de la anterior:

ExtractJwt.fromAuthHeader()