#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. Затем, как только у вас будет этот минимальный код, опубликуйте весь недлинный код с проблемами в Stackoverflow4. Спасибо, но те старые маршруты, в
index.js
которых такжеenableSecurity()
есть, работают нормально. Путь, который требуетсяsecurity
convert.js
ввести, можно отформатировать в../../security
формате?5. Это становится все более странным… Я сопоставил нарушающий маршрут
index.js
с другими маршрутами, которые хорошо работают. Это не работает; там работает, так что я в тупике.
Ответ №1:
Просто немного пищи для размышлений здесь, и мы сделаем что-то подобное, но если вы используете
enableSecurity(app)
В качестве промежуточного программного обеспечения на маршруте и
next()
функция в промежуточном программном обеспечении вы можете не указывать на необходимость этого обещания, потому что промежуточное программное обеспечение предназначено для обработки в порядке промежуточного программного обеспечения, и следующая функция сообщает express о переходе к следующему промежуточному программному обеспечению.
Как мы это делаем, чтобы иметь промежуточное программное обеспечение «auth», потому что промежуточное программное обеспечение будет передавать объекты req и res каждому из них в стеке, вы можете декодировать все ваши JWT в одном месте.
Обычно мы передаем токен в заголовке ИЛИ объекте req, просто зависит от передаваемого нами миметипа, поэтому при проверке подлинности мы проверяем, находится ли токен в заголовке или req, если это так, мы декодируем, если он проходит, мы передаем декодирование
next()
в этом блоке кода в противном случае мы отправляем.json({«ответ»:»не авторизован»})