Как использовать подстановочный знак в JWT разве что?
Я использую Express-JWT для защиты моего приложения узла, и мне интересно, как я могу использовать подстановочный знак в параметре never. Мой рабочий код приведен ниже, и я действительно хотел бы открыть доступ ко всему, что имеет путь, начинающийся с '/login', поэтому мне не нужно перечислять каждый отдельный ресурс. Когда я добавляю '/login *' к незащищенному массиву, он заканчивает тем, что блокирует / login с 401/ несанкционированным.
Работает:
// routes open to all
var unprotected = [
'/login',
'/login/app/main.js',
'favicon.ico'
];
// configure jwt
var jwtCheck = jwt({
secret: new Buffer(config.get('auth0.secret'), 'base64'),
audience: config.get('auth0.clientid')
});
// insert jwt middleware
app.use( jwtCheck.unless({path: unprotected}) );
Не работает:
// routes open to all
var unprotected = [
'/login*',
'favicon.ico'
];
// configure jwt
var jwtCheck = jwt({
secret: new Buffer(config.get('auth0.secret'), 'base64'),
audience: config.get('auth0.clientid')
});
// insert jwt middleware
app.use( jwtCheck.unless({path: unprotected}) );
2 ответа
Регулярное выражение должно существовать вне кавычек:
var unprotected = [
/\/login*/,
/favicon.ico/
];
Обратите внимание, что в настоящее время с выражением express-, если вы не можете смешать регулярное выражение и строки в одном и том же массиве конфигурации, именно поэтому второй аргумент должен иметь косую черту вместо кавычек.
Вы можете использовать путь к регулярному выражению, и вам не нужно будет писать эти уродливые regExps самостоятельно.
Образец ниже:
const pathToRegexp = require('path-to-regexp');
// Use JWT auth to secure the API
const unprotected = [
pathToRegexp('/login*'),
pathToRegexp('/favicon.ico')
];
app.use(expressJwt({ secret: config.tokenSecret }).unless({ path: unprotected }));
[ ОБНОВИТЬ ]
Совместимость с Express <= 4.x, pathToRegexp следует использовать, как показано ниже
const unprotected = [
pathToRegexp('/login/(.*)')
];
Без подстановочного знака звездочки (*) - используйте вместо него параметры ((.*) Или:splat*)