使用 express-jwt,我可以返回 401 以外的其他状态码吗?

Posted

技术标签:

【中文标题】使用 express-jwt,我可以返回 401 以外的其他状态码吗?【英文标题】:With express-jwt, can I return a different status code other than 401? 【发布时间】:2018-10-19 23:05:42 【问题描述】:

我正在使用 express-jwt。我想在失败时发回不同的状态码。我实际上设置了 2 个不同的 express-jwt 中间件,一个需要凭据,另一个可以选择解码令牌(如果存在)。对于后者,如果令牌存在但过期,我想返回不同的状态代码,因为在 401 上,我的应用程序会自动将用户重定向到登录页面,我不希望在可选身份验证时发生这种情况。

这是我的 express-jwt 设置:

const jwt = require('express-jwt');

exports.decodeAuthIfExist = jwt(
  secret: jwksRsa.expressJwtSecret(
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: 5,
    jwksUri: `https://$process.env.AUTH0_DOMAIN/.well-known/jwks.json`
  ),
  credentialsRequired: false,
  audience: process.env.AUTH0_AUDIENCE,
  issuer: `https://$process.env.AUTH0_DOMAIN/`,
  algorithms: ['RS256']
);

这就是我使用它的方式:

app.get('/resource',
    auth.decodeAuthIfExist,
    resource.get);

我需要修改什么才能返回例如 402 的状态码。

【问题讨论】:

【参考方案1】:

express-jwt 将引发 UnauthorizedError 错误。它根本不设置状态。

您在某处定义了错误中间件来处理异常。

【讨论】:

不能,它是express-jwt 源代码本身的一部分。见来源:github.com/auth0/express-jwt/blob/master/lib/index.js

以上是关于使用 express-jwt,我可以返回 401 以外的其他状态码吗?的主要内容,如果未能解决你的问题,请参考以下文章

路由前的 Express-jwt 控制令牌

Express-jwt 没有返回任何响应

授权总是返回 401

为啥 OAuth2 身份验证服务器使用 jdbc 数据源返回 401 错误?

远程服务器返回错误:(401) Unauthorized with paypal

JWT 令牌未经过验证,因此每次都返回 401 未授权