NodeJS jwtStrategy 需要一个函数来从请求错误中检索 jwt
NodeJS jwtStrategy requires a function to retrieve jwt from requests error
我从 https://devdactic.com/restful-api-user-authentication-1/ 学习了教程。但是我在这部分出错了
passport.use(new JwtStrategy(opts, function(jwt_payload, done)
这里是我运行节点"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
解决方法是什么?
我认为您使用的是 'passport-jwt' 2.0.0,它从本教程使用的 v1.x.x 中添加了一些重大更改。在 opts
你需要传递另一个选项 jwtFromRequest
来告诉它在哪里寻找 jwt payload。
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
}
});
}));
从 official documentation 开始,当使用 JWT 从 2.x 迁移到 3.x 时,您应该使用:
ExtractJwt.fromAuthHeaderWithScheme('jwt')
而不是旧的:
ExtractJwt.fromAuthHeader()
我从 https://devdactic.com/restful-api-user-authentication-1/ 学习了教程。但是我在这部分出错了
passport.use(new JwtStrategy(opts, function(jwt_payload, done)
这里是我运行节点"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
解决方法是什么?
我认为您使用的是 'passport-jwt' 2.0.0,它从本教程使用的 v1.x.x 中添加了一些重大更改。在 opts
你需要传递另一个选项 jwtFromRequest
来告诉它在哪里寻找 jwt payload。
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
}
});
}));
从 official documentation 开始,当使用 JWT 从 2.x 迁移到 3.x 时,您应该使用:
ExtractJwt.fromAuthHeaderWithScheme('jwt')
而不是旧的:
ExtractJwt.fromAuthHeader()