0

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并且它似乎继续工作,不明白为什么。我去了文档,但不清楚这一点。

4

1 回答 1

0

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

  • jwtFromRequest(必需)接受请求作为唯一参数并将 JWT 作为字符串或 null 返回的函数。有关更多详细信息,请参阅从请求中提取 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')
    }, ...)
    
于 2018-04-30T16:41:02.180 回答