Почему мой аутентифицированный маршрут NodeJS возвращает результаты с неверным токеном JWT?

#node.js #jwt

Вопрос:

У меня есть приложение NodeJS, которое я начал разделять на файлы меньшего размера, так как оригинал стал немного раздутым.

В моем index.js У меня есть маршруты, которые защищены функцией, написанной фрилансером для обеспечения аутентификации JWT. Эти маршруты работают по мере необходимости.

 app.use(require('./lib/api-calls/convert.js'));

//  Security Enabled index.js
//
const { app } = require ('./lib/deps/init_dependencies.js');
const { enableSecurity } = require("./security");
const main = async () => {

    // Enable API JWT Security = Comment out the line below to turn off security.
    await enableSecurity(app);
        
    app.get('/v1/createSession:key/:limit', function (req, apiResponse) {
        
       // My route, working well

    });
}
main()
 

Я создал /lib/routes/convert.js и хочу записать в этот файл новые маршруты, которые также требуют аутентификации JWT. Однако я всегда получаю статус 200 «ОК», независимо от того, правильный заголовок аутентификации или нет… Я использую Почтальона для своих звонков. Вот мой код:

 const app = require('express')();
    
//JWT authentication
const { enableSecurity } = require('../../security');
const main = async () => {

    // Enable API JWT Security = Comment out the line below to turn off security.
    await enableSecurity(app);

    app.get('/v3/convertw3w/:locationValue/:countryCode', function (req, res) {
        
        res.status(200).send({ status: 'OK' });

    });
}
main()
module.exports = app;
 

Может ли кто-нибудь заметить проблему? Я потратил слишком много времени на эту последнюю ночь!

Спасибо

Комментарии:

1. Пожалуйста, покажите достаточное количество кода, который бы по крайней мере облегчил понимание того, как все происходит, слишком многое здесь оставлено на волю воображения.

2. @Джеймс, маршруты довольно длинные и усложнили бы вопрос. Есть ли где-нибудь конкретное место, где вы хотели бы, чтобы я расширил код?

3. В коде, который вы опубликовали, нет ничего неправильного. Любые проблемы, вероятно, связаны с кодом, который вы здесь не публиковали. Я предполагаю, enableSecurity() но это только предположение. Попробуйте удалить как можно больше кода, но все равно сможете воспроизвести проблему НА СВОЕМ КОМПЬЮТЕРЕ, А НЕ НА STACKOVERFLOW. Затем, как только у вас будет этот минимальный код, опубликуйте весь недлинный код с проблемами в Stackoverflow

4. Спасибо, но те старые маршруты, в index.js которых также enableSecurity() есть, работают нормально. Путь, который требуется security convert.js ввести, можно отформатировать в ../../security формате?

5. Это становится все более странным… Я сопоставил нарушающий маршрут index.js с другими маршрутами, которые хорошо работают. Это не работает; там работает, так что я в тупике.

Ответ №1:

Просто немного пищи для размышлений здесь, и мы сделаем что-то подобное, но если вы используете

 enableSecurity(app)
 

В качестве промежуточного программного обеспечения на маршруте и

 next()
 

функция в промежуточном программном обеспечении вы можете не указывать на необходимость этого обещания, потому что промежуточное программное обеспечение предназначено для обработки в порядке промежуточного программного обеспечения, и следующая функция сообщает express о переходе к следующему промежуточному программному обеспечению.

Как мы это делаем, чтобы иметь промежуточное программное обеспечение «auth», потому что промежуточное программное обеспечение будет передавать объекты req и res каждому из них в стеке, вы можете декодировать все ваши JWT в одном месте.

Обычно мы передаем токен в заголовке ИЛИ объекте req, просто зависит от передаваемого нами миметипа, поэтому при проверке подлинности мы проверяем, находится ли токен в заголовке или req, если это так, мы декодируем, если он проходит, мы передаем декодирование

 next()
 

в этом блоке кода в противном случае мы отправляем.json({«ответ»:»не авторизован»})