2016-04-10 25 views
15

https://devdactic.com/restful-api-user-authentication-1/'dan eğiticiyi öğrendim. Ama bu bölümünde İşteNodeJS jwtStrategy, istekleri hatadan jwt almak için bir işlev gerektirir

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

üzerinde hata var ben

/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 

çözüm nedir "server.js" düğüm çalıştırdığınızda hata nedir?

+0

sayesinde bu yazı için Ayrıca bu öğretici yapıyor ve bu hata – HappyCoder888

cevap

38

'Passport-jwt' 2.0.0 kullanıyorsunuz, bu da eğitimci tarafından kullanılan v1.x.x dosyasından bazı değişiklikler ekledi. opts'da, jwt yükünü nereye arayacağınızı söylemek için başka bir seçenek jwtFromRequest iletmeniz gerekir. JWT'yi kullanarak 3x'den 2.x taşıma gerçekleştirirken official documentation itibaren

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 
     } 
    }); 
})); 
+11

var '' 'ExtractJwt.fromAuthHeader bir işlev' '' hatası karşı karşıya olan herkes için, pasaport-jwt 2.0 3.0 arası değişiklikleri kırma vardır !. ** gibi bir başka çıkarıcı kullanmalısınız ** fromAuthHeaderAsBearerToken **. Ekstralar listesini https://www.npmjs.com/package/passport-jwt#included-extractors adresinden kontrol edin. –

14

, kullanmak olmalıdır: yerine eskisinin

ExtractJwt.fromAuthHeaderWithScheme('jwt') 

:

ExtractJwt.fromAuthHeader() 
+0

Doğrulanmış çözümü daha önce kullanıyordum, ancak yeni bir projeye başladığımda 3.x kullandığımı fark etmedim ve bu çözümler sorunumu çözdü! –

İlgili konular