Как использовать подстановочный знак в 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*)

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