【问题标题】:is it possible to change the `JWT` string with `JwtStrategy`?是否可以用 `JwtStrategy` 更改`JWT` 字符串?
【发布时间】:2018-10-10 15:56:45
【问题描述】:

我从网上下载了一个Node / Ionic 项目,然后...

在授权控制器文件上,我有以下内容:

...
exports.login = function(req, res, next) {
    var userInfo = getUserInfo(req.user);
    res.status(200).json({
        token: 'JWT ' + generateToken(userInfo),
        userInfo: userInfo
    });
}
...

在其他配置文件上我有以下内容:

...
passport.use(
    new JwtStrategy({
            secretOrKey: credentials.secret,
            jwtFromRequest: ExtractJwt.fromAuthHeader(),
        },
        function(payload, done) {
            User.findById(
                payload._id,
                function(err, user) {
                    if (err) {
                        return done(err, false);
                    }
                    if (user) {
                        return done(null, user);
                    } else {
                        return done(null, false);
                    }
                }
            );
        }
    )
);
...

routes 文件中,我有以下内容:

...
app.get(
    '/api/auth/check',
    passport.authenticate('jwt', { session: false }),
    function(req, res) {
        var user = req.user;
        res.send({ content: 'Success', user: user });
    }
...

那么,我有一个具体的问题:

授权控制器文件中的“JWT”是什么?

...
token: 'JWT ' + generateToken(userInfo),
...

如果我想使用ABCDEF 而不是JWT 呢?实际上,我尝试了不同于:JWT 的其他字符串,它似乎继续工作,不明白为什么。我去了documentation,但不清楚。

【问题讨论】:

    标签: node.js express jwt passport.js passport-jwt


    【解决方案1】:

    文档清楚地说明了如何做到这一点:

    • jwtFromRequest(必需)接受请求作为唯一参数并将 JWT 作为字符串或 null 返回的函数。有关详细信息,请参阅请求中的Extracting the JWT

    你在做:

    new JwtStrategy({
        secretOrKey: credentials.secret,
        jwtFromRequest: ExtractJwt.fromAuthHeader()
    }, ...)
    

    你有两个选择:

    1. 编写您自己的函数来提取 JWT:

      function myExtractor(req) {
          const jwt = req.header('ABCDEF')
          // ... do work
          return 'extractedJwtToken from work.'
      }
      
    2. 使用提供的允许您指定自定义方案的提取器:

      new JwtStrategy({
          secretOrKey: credentials.secret,
          jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('ABCDEF')
      }, ...)
      

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 2015-02-26
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2015-12-04
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多