Можно ли изменить строку `JWT` с помощью` JwtStrategy`? - PullRequest
0 голосов
/ 30 апреля 2018

Я скачал 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 и, похоже, продолжает работать, не понимаю почему. Я пошел к документации , но не совсем понятно.

1 Ответ

0 голосов
/ 30 апреля 2018

В документации ясно, как это сделать:

  • jwtFromRequest (ОБЯЗАТЕЛЬНО) Функция, которая принимает запрос в качестве единственного параметра и возвращает JWT в виде строки или ноль. См. Извлечение 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')
    }, ...)
    
...