微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel API:验证不会访问我的 API 中的 PUT 请求数据

如何解决Laravel API:验证不会访问我的 API 中的 PUT 请求数据

背景

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

预期行为

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

实际行为

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

相反,数据验证说:

{ "message": "给定的数据无效。",“错误”:{ “电子邮件”: [ “电子邮件字段是必需的。” ],“名称”: [ “该名称字段是必需的。” ] } }

路线和请求

邮递员请求

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 术语中,这意味着不发送“参数”,发送授权承载令牌,发送一些 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
}

我尝试做的……或者做的

  • 一些 Stackoverflow 的答案是:发送 POST 请求并发送正文 _method=PUT。我不想这样做。我真的更喜欢发送 PUT 请求。因为我正在开发一个 API。这完全证明了我必须使用 PUT 请求而不是 PUT 请求的事实。

  • 一些 Stackoverflow 的答案是:使用 x-www-form-urlencoded 而不是简单的 form。它不能解决问题;而且已经是这样了。也许它可以帮助发送图像。 (注意我不想在这里发送任何图片)。

问题

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

解决方法

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

您发送的是:email=XYZ@XYZ.FR&name=test2

你应该发送这个:

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

一个有效的 JSON 对象

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。