是否可以使用 `JwtStrategy` 更改 `JWT` 字符串?

is it possible to change the `JWT` string with `JwtStrategy`?

我从网上下载了一个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但是不清楚这个

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

  • jwtFromRequest(必需)接受请求作为唯一参数的函数,returns 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')
    }, ...)