首页 > 解决方案 > Passport JWT 策略提取选项

问题描述

使用 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);
  }
}));

谢谢!我在这个很久了......

标签: node.jsauthenticationjwtpassport.jspassport-local

解决方案


使用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) => {
  ...
});

推荐阅读