护照JWT策略提取选项

时间:2018-12-21 07:02:59

标签: node.js authentication jwt passport.js passport-local

使用Passport JWT策略,我正在通过params传递令牌,并像这样ExtractJWT.fromUrlQueryParameter('secret_token')提取令牌。

但是有时候我会通过header传递令牌,我想像这样ExtractJWT.fromHeader('secret_token')提取它。

如何检查其传递方式并动态使用正确的提取方法

这是我的代码:

passport.use(new JWTstrategy({
  secretOrKey: process.env.AUTH_SECRET,
  jwtFromRequest: ExtractJWT.fromUrlQueryParameter('secret_token')

}, async (token, done) => {
  try {
    //Pass the user details to the next middleware
    return done(null, token.user);
  } catch (error) {
    done(error);
  }
}));

谢谢!我在这上呆了很长时间......

3 个答案:

答案 0 :(得分:0)

尝试这种方式:

$keyword = "ios-developer-jobs-in-noida";

$city =   substr(str, (-1)*strrpos($keyword, "-"))

答案 1 :(得分:0)

答案:

我认为无法使用ExtractJWT.fromUrlQueryParameter等以常规方式完成此操作。

这是一种解决方法...

它将查找名称为query params的{​​{1}}或headers

secret_token

答案 2 :(得分:0)

使用 ExtractJwt.fromExtractors()方法

var jwtStrategy = new JwtStrategy({
// this will try to extract from Query parm, header and Authheader
  jwtFromRequest: ExtractJwt.fromExtractors([ExtractJwt.fromUrlQueryParameter("secret_token"), ExtractJwt.fromHeader("secret_token"), ExtractJwt.fromAuthHeaderAsBearerToken()]),
//here we have defined all possible extractors in an array
  secretOrKey: process.env.AUTH_SECRET
}, async (payload, done) => {
  ...
});