Параметры извлечения стратегии JWT паспорта

Использование стратегии Passport JWT, я передаю токен через params и извлекаю токен, как этот ExtractJWT.fromUrlQueryParameter('secret_token').

Но иногда я передаю токен через header, я бы хотел извлечь его как этот ExtractJWT.fromHeader('secret_token').

Как я могу проверить, как он передается, и использовать правильный метод извлечения динамически.

Это мой код:

passport.use(new JWTstrategy({
  secretOrKey: process.env.AUTH_SECRET,
  jwtFromRequest: ExtractJWT.fromUrlQueryParameter('secret_token')

}, async (token, done) => {
  try {
    //Pass the user details to the next middleware
    return done(null, token.user);
  } catch (error) {
    done(error);
  }
}));

Спасибо! Я уже давно этим занимаюсь ....

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 943
4

Ответы 4

попробуйте так:

const options = {};
options.jwtFromRequest = ExtractJWT.fromUrlQueryParameter('secret_token')!=undefined?ExtractJWT.fromUrlQueryParameter('secret_token'):ExtractJWT.fromHeader('secret_token');
options.secretOrKey = process.env.AUTH_SECRET;

passport.use(new JWTstrategy(options, async (token, done) => {
  try {
    //Pass the user details to the next middleware
    return done(null, token.user);
  } catch (error) {
    done(error);
  }
}));

Извините, это не сработает, будет оцениваться только первый параметр.

Morris S 21.12.2018 15:15

Отвечать:

Вот обходной путь ...

Он ищет query params или headers с именем secret_token .

var url = require('url');

const options = {};
options.jwtFromRequest = (request) => {
  var token = null;
  var param_name = 'secret_token' //parameter name 
  var parsed_url = url.parse(request.url, true);

  if (request.headers[param_name]) {
    token = request.headers[param_name];
  }
  else if (parsed_url.query && Object.prototype.hasOwnProperty.call(parsed_url.query, param_name)) {
    token = parsed_url.query[param_name];
  }
  return token;
}
options.secretOrKey = process.env.AUTH_SECRET;

passport.use(new JWTstrategy(options, async (token, done) => {
  try {
    //Pass the user details to the next middleware
    return done(null, token.user);
  } catch (error) {
    done(error);
  }
}));

Используйте метод ExtractJwt.fromExtractors ()

var jwtStrategy = new JwtStrategy({
// this will try to extract from Query parm, header and Authheader
  jwtFromRequest: ExtractJwt.fromExtractors([ExtractJwt.fromUrlQueryParameter("secret_token"), ExtractJwt.fromHeader("secret_token"), ExtractJwt.fromAuthHeaderAsBearerToken()]),
//here we have defined all possible extractors in an array
  secretOrKey: process.env.AUTH_SECRET
}, async (payload, done) => {
  ...
});

Добавлен метод извлечения токена из заголовка. Передайте это как:

  • Authorization: Bearer {token}
  • Content-Type : application/json
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()

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

Community 15.10.2021 09:31

Другие вопросы по теме

Почему мой паспорт js-аутентификации всегда не работает?
Настройте вход с учетной записью Google с помощью настраиваемых политик в Azure Active Directory B2C и получите изображение профиля
Как реализовать многопользовательскую (4 типа пользователей) аутентификацию в laravel с двумя связанными таблицами - ролями и пользователями
Как сопоставить различный контент на странице в зависимости от того, какой пользователь вошел в систему?
Как ограничить внешний вход в учетную запись Microsoft списком адресов электронной почты или одним доменом в ASP.NET Core
Curl в окнах с использованием Http / 2 и аутентификации Windows (SPNEGO, Kerberos, Negotiate)
Вход в мою установку Gitlab CE с учетной записью моего приложения
Почему большинство людей используют перехватчик для добавления заголовка аутентификации при модернизации?
Строки из межсерверного запроса в таблице SQL Server отсутствуют, возможно, из-за разрешений пользователя
Значение sqlite3 в Ruby Script не работает как строка