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

时间:2018-04-30 14:21:14

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

我从互联网下载了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),
...

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

1 个答案:

答案 0 :(得分:0)

文档清楚说明如何执行此操作:

  • jwtFromRequest(REQUIRED)接受请求作为唯一参数并将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')
    }, ...)