Node.js NodeJS jwtStrategy需要一个函数来从错误请求中检索jwt

Node.js NodeJS jwtStrategy需要一个函数来从错误请求中检索jwt,node.js,passport.js,Node.js,Passport.js,我从中学到了教程。但我在这部分有错误 passport.use(new JwtStrategy(opts, function(jwt_payload, done) 下面是运行节点“server.js”时出现的错误 /home/chibi/Documents/connect/project/node\u modules/passport jwt/lib/strategy.js:39 抛出新类型错误('JwtStrategy需要一个函数来检索JWTF ^ TypeError:JwtStrategy

我从中学到了教程。但我在这部分有错误

passport.use(new JwtStrategy(opts, function(jwt_payload, done)
下面是运行节点“server.js”时出现的错误

/home/chibi/Documents/connect/project/node\u modules/passport jwt/lib/strategy.js:39
抛出新类型错误('JwtStrategy需要一个函数来检索JWTF
^
TypeError:JwtStrategy需要一个函数从请求中检索jwt(请参阅选项jwtFromRequest)
在新的JwtStrategy(/home/chibi/Documents/connect/project/node_modules/passport jwt/lib/strategy.js:39:15)
在module.exports(/home/chibi/Documents/connect/project/config/passport.js:10:16)
在对象上。(/home/chibi/Documents/connect/project/server.js:30:29)
在模块处编译(Module.js:456:26)
在Object.Module.\u extensions..js(Module.js:474:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
位于Function.Module.runMain(Module.js:497:10)
启动时(node.js:119:16)
在node.js:902:3

解决方案是什么?

我认为您使用的是“passport jwt”2.0.0,它在教程使用的v1.x.x中添加了一些突破性的更改。在
选项中,您需要传递另一个选项
jwtFromRequest
,告诉它在哪里查找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
        }
    });
}));
从中,当使用JWT从2.x迁移到3.x时,应使用:

ExtractJwt.fromAuthHeaderWithScheme('jwt')
而不是旧的:

ExtractJwt.fromAuthHeader()

感谢这篇文章也做了这篇教程,也为任何面临
ExtractJwt的人得到了这个错误。fromAuthHeader不是一个函数
错误,passport jwt 2.0到3.0之间有一些突破性的更改。你应该使用其他的提取器,比如fromAuthHeaderBealerToken。检查提取器列表。@Ishanthilinasomari你是一个lifesaver.Mods,此答案的编辑队列似乎已满。请您分析编辑并将上述注释添加到此答案中,好吗?我以前使用的是经过验证的解决方案,但当我开始一个新项目时,我没有意识到我使用的是3.x,此解决方案解决了我的问题!
ExtractJwt.fromAuthHeader()