Использование стратегии 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);
}
}));
Спасибо! Я уже давно этим занимаюсь ....





попробуйте так:
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);
}
}));
Отвечать:
Вот обходной путь ...
Он ищет 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/jsonjwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
Ваш ответ можно улучшить с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, такую как цитаты или документация, чтобы другие могли подтвердить, что ваш ответ правильный. Вы можете найти дополнительную информацию о том, как писать хорошие ответы в справочном центре.
Извините, это не сработает, будет оцениваться только первый параметр.