7

我正在使用 express-jwt 来保护我的节点应用程序,并且想知道如何在 unless 参数中使用通配符。我的工作代码如下,我真正想做的是开放对路径以“/login”开头的任何内容的访问,这样我就不必列出每一个资源。当我将“/login*”添加到未受保护的数组时,它最终会以 401/unauthorized 阻塞 /login。

作品:

// 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}) );
4

2 回答 2

12

正则表达式需要存在于引号之外:

var unprotected = [
  /\/login*/,
  /favicon.ico/
];

请注意,此时使用 express-除非您不能在同一个配置数组中混合正则表达式和字符串,这就是为什么第二个参数需要使用正斜杠而不是引号的原因。

于 2016-09-02T01:52:27.473 回答
6

您可以使用正则表达式的路径,而无需自己编写那些丑陋的正则表达式。

下面的示例:

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 }));
于 2017-04-14T12:11:19.553 回答