[strapi]返回身份验证 500 内部服务器错误而不是 400 错误请求

2024-05-13 262 views
1
错误报告 所需的系统信息
  • Node.js 版本:18.6.1
  • NPM版本:9.5.1
  • 斯特拉皮版本:4.11.3
  • 数据库:sqlite
  • 操作系统:macOS Monterey v12.6
  • 你的项目是Javascript还是Typescript:Javascript
描述错误

当使用不正确的用户名或密码使用 api/auth/local 进行身份验证时,会返回 HTTP 状态 500 内部服务器错误,而在控制台中会显示 ValidationError:无效的标识符或密码。

重现行为的步骤
  1. 在 Postman 中使用以下 URL 设置 POST 请求:http://localhost:1337/api/auth/local
  2. 在正文部分中创建以下 JSON 对象:{"identifier": "john.doe@example.com", "password": "password"}
  3. 单击发送
  4. 查看回复

响应是 500 内部服务器错误。

{
    "data": null,
    "error": {
        "status": 500,
        "name": "InternalServerError",
        "message": "Internal Server Error"
    }
}
预期行为

HTTP 状态 400(错误请求)应与以下 JSON 对象一起返回:{message: "Identifier or password invalid"}

额外的背景信息

在调试过程中,我注意到以下几点:

  1. 它抛出一个 ValidationError ,它扩展了插件用户权限 > 服务器 > 控制器 > auth.js 中的 ApplicationError
  2. 然后它被中间件strapi > lib > middlewares > body.js 捕获并重新抛出。这里的错误是 Error 的一个实例,但我看不到它是 ApplicationError 还是 ValidationError 的实例,因为这在 body.js 中不可用。
  3. 然后它被中间件 bandi>lib>middlewares>errors.js 捕获,但这里的错误不再是 ApplicationError 的实例,因此 HTTP 状态在 formatInternalError 中设置为 500 作为捕获所有状态。

另请参阅:https://forum.strapi.io/t/get-500-error-on-client-side-but-403-in-terminal-for-the-backend/14496/19

回答

5

嗨,@edwinhaver。如果这个问题仍然存在,您能给我一个解决这个问题的机会吗?

5

嗨@inumaki,问题仍然存在。如果您能解决这个问题,将不胜感激。

0

当然@edwinhaver,您可以将此问题分配给我。

7

@inumaki,我似乎没有分配问题的权限。

2

@inumaki,如果你愿意的话,你可以自己编写一个 PR 并提交它,不需要分配他的问题本身。只需按照CONTRIBUTING引用它即可 ,目前也正在尝试复制此内容。

0

@edwinhaver 我无法复制这个,目前我正在同一版本上运行,并且收到 400 错误。这是一个全新的 Strapi 项目,除了管理员用户之外没有添加任何内容。 图像

7

这是一条模板消息

你好@edwinhaver,

感谢您报告此错误,但是根据我们现有的信息,我们无法重现您所描述的问题。您能否创建一个能够在其中重现该问题的新项目,提供重现此问题的明确步骤,并将此新项目上传到新的 GitHub 存储库,或者将其压缩为.zip并上传到此问题?

我们非常感谢您对此的帮助,通过在一个新项目中工作,它将消除任何可能不相关的变量。请注意,status: can not reproduce如果没有任何活动,标记为 的问题将在 14 天内关闭。

谢谢你!

6

嗨@edwinhaver,@Eventyret,我也无法重现它,因为它给了我预期的输出 图像

6

我们的项目中长期存在这个问题


 "@strapi/strapi": "4.10.5",
 "@strapi/utils": "^4.10.5",
1

标记为已关闭,因为我们需要更新步骤来重现或更多信息。一旦提供更多信息,我们就可以重新开放。

2

嘿,

我在尝试重现它时遇到错误,事实证明问题出在“@strapi/plugin-users-permissions”包上。好消息是,将软件包更新到版本 4.11.5 应该可以解决该问题。

要解决此问题,只需将以下包版本添加到项目的依赖项中即可:

"@strapi/plugin-users-permissions": "4.11.5",
"@strapi/strapi": "4.11.5"
1

我使用最新版本(4.11.5)进行了全新安装,这已经解决了问题。

0

在最新版本(4.11.7)中不适用于我。

8

在 4.12.1 中不为我工作,但在 4.12.0 中为我工作

9

使用(打字稿)同样的问题:

  • 节点:v18.16.1
  • npm:9.5.1
  • 操作系统:节点:18-alpine

看起来https://github.com/strapi/strapi/blob/main/packages/plugins/users-permissions/server/controllers/auth.js中的错误由于某种原因未得到处理。

{
// package.json
    "@strapi/plugin-documentation": "4.12.1",
    "@strapi/plugin-i18n": "4.12.1",
    "@strapi/plugin-users-permissions": "4.12.1",
    "@strapi/provider-email-nodemailer": "4.12.1",
    "@strapi/strapi": "4.12.4"
//...
}

带日志:

strapi-backend  | [2023-08-15 10:47:15.760] error: Invalid identifier or password
strapi-backend  | ValidationError: Invalid identifier or password
strapi-backend  |     at Object.callback (/opt/node_modules/@strapi/plugin-users-permissions/server/controllers/auth.js:62:15)
strapi-backend  |     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
strapi-backend  |     at async returnBodyMiddleware (/opt/node_modules/@strapi/strapi/lib/services/server/compose-endpoint.js:52:18)
strapi-backend  |     at async policiesMiddleware (/opt/node_modules/@strapi/strapi/lib/services/server/policy.js:24:5)
strapi-backend  |     at async /opt/node_modules/@strapi/strapi/lib/middlewares/body.js:58:9
strapi-backend  |     at async /opt/node_modules/@strapi/strapi/lib/middlewares/logger.js:9:5
strapi-backend  |     at async /opt/node_modules/@strapi/strapi/lib/middlewares/powered-by.js:16:5
strapi-backend  |     at async cors (/opt/node_modules/@koa/cors/index.js:61:32)
strapi-backend  |     at async /opt/node_modules/@strapi/strapi/lib/middlewares/errors.js:13:7
strapi-backend  |     at async session (/opt/node_modules/koa-session/index.js:41:7)