首页 > 解决方案 > Laravel API:验证不访问我的 API 中的 PUT 请求数据

问题描述

语境

我正在使用PUTLaravel 8 中的请求实现用户信息更新。我使用 Postman 发送请求并查看结果。

预期行为

我的PUT请求到达了控制器的功能,该功能被许可更新经过身份验证的用户。后者更新成功。因此validate调用成功执行并在请求中找到数据。

实际行为

我的PUT请求到达了控制器的功能,该功能被许可更新经过身份验证的用户。后者没有成功更新。实际上,validate调用成功执行了,但没有在请求中找到数据。

相反,数据验证说:

{ "message": "给定的数据无效。", "errors": { "email": [ "email field is required." ], "name": [ "名称字段为必填项。" ] } }

路线和请求

邮递员请求

curl --location --request PUT 'https://XYZ/api/set_user_data' \
--header 'X-Requested-With: XMLHttpRequest' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer 12|leRLA5yopCLIxe0oN9MMThctqD78iJDjZdZQkcgs' \
--data-urlencode 'email=XYZ@XYZ.FR' \
--data-urlencode 'name=test2'

这意味着在 Postman 术语中没有发送“Params”,发送了 Authorization Bearer 令牌,发送了一些 Headers 并且发送了一些 Body 的 x-www-form-urlencoded 数据。

API 路由

routes/api.php

Route::put('/set_user_data', [UserController::class, 'setUserData'])->name('set_user_data');

UserController::setUserData

public function setUserData(Request $request) {
    if(!Auth::check()) {
        return 'unauthenticated.';
    }

    $request->validate([
        'email' => 'required|email',
        'name' => 'required|string'
    ]);

 // ... update user here but out of topic
}

我试图做的……或不做的事

问题

为什么 Laravelvalidate找不到我请求的数据以及如何解决?

标签: laravellaravel-routingputlaravel-api

解决方案


您将请求发送为"Content-type: application/json",但您没有将正文作为有效 JSON 发送。

你发送这个:email=XYZ@XYZ.FR&name=test2

你应该发送这个:

{"email":"XYZ@XYZ.FR", "name": "test2"}

一个有效的 JSON 对象


推荐阅读