- 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:无效的标识符或密码。
重现行为的步骤- 在 Postman 中使用以下 URL 设置 POST 请求:http://localhost:1337/api/auth/local
- 在正文部分中创建以下 JSON 对象:
{"identifier": "john.doe@example.com", "password": "password"}
- 单击发送
- 查看回复
响应是 500 内部服务器错误。
{
"data": null,
"error": {
"status": 500,
"name": "InternalServerError",
"message": "Internal Server Error"
}
}
预期行为
HTTP 状态 400(错误请求)应与以下 JSON 对象一起返回:{message: "Identifier or password invalid"}
。
在调试过程中,我注意到以下几点:
- 它抛出一个 ValidationError ,它扩展了插件用户权限 > 服务器 > 控制器 > auth.js 中的 ApplicationError
- 然后它被中间件strapi > lib > middlewares > body.js 捕获并重新抛出。这里的错误是 Error 的一个实例,但我看不到它是 ApplicationError 还是 ValidationError 的实例,因为这在 body.js 中不可用。
- 然后它被中间件 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