gpt4 book ai didi

php - Laravel 5 通过 ajax 发出 DELETE 请求 - 方法不允许

转载 作者:搜寻专家 更新时间:2023-10-31 21:26:48 25 4
gpt4 key购买 nike

我正在尝试使用 ajax 在 Laravel 应用程序中发出 DELETE 请求

我有一个函数可以使用正确的动词向资源发出请求,但不断出现不允许的方法:

这是我的 ajax 请求:

$.ajax({
type: 'DELETE',
url:'/user/58',
data: {
'_method': 'DELETE',
'id': id
},
dataType: 'json',
success: function (data) {
// do something with ajax data
if (data.result) {
return true;
}

return false;

},
error: function (xhr, ajaxOptions, thrownError) {
console.log('error...', xhr);
return false;
//error logging
},
complete: function () {
//afer ajax call is completed
}
});

id 在一个函数中提供,测试是 58。

在 Chrome 中查看网络面板,我可以看到它以 user/58 的预期 url 开头,但很快就缩短为 user

我知道要获取资源路由以获取请求,它需要是 user/58 和 DELETE 方法,因此它将转到 destroy 方法,因此它被路由到需要 GET 请求的 Index 方法,因此不允许使用该方法。

为什么我的请求 url 被更改了?

在 Laravel 中发出 DELETE 请求的正确方法是什么?

谢谢

编辑:这是我的路线:

Route::group( [ 'middleware' => [ 'auth' , 'admin' ] ] , function ()
{
Route::resource( 'user' , 'UserController' );
} );

csrf token 在 header 中得到处理 - 可以肯定这不是问题的原因,因为我没有收到无效 token 异常

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

谢谢

最佳答案

这里可能会发生两种情况,我需要在比评论更长的帖子中写这篇文章,所以希望我做对了。

首先出现在我脑海中的是在执行 ajax 请求时失败的身份验证检查。如果您没有足够的权限,至少我会将您重定向回主要资源。

然而,我的第二个猜测可能更有可能。你有没有想过你需要用ajax请求发送的X-CSRF-TOKEN?参见 https://laravel.com/docs/5.2/routing#csrf-x-csrf-token


来自文档:

除了检查 CSRF token 作为 POST 参数外,Laravel VerifyCsrfToken 中间件还将检查 X-CSRF-TOKEN 请求 header 。例如,您可以将 token 存储在“元”标记中:

<meta name="csrf-token" content="{{ csrf_token() }}">

创建元标记后,您可以指示 jQuery 等库将 token 添加到所有请求 header 。这为基于 AJAX 的应用程序提供了简单、方便的 CSRF 保护:

$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});

关于php - Laravel 5 通过 ajax 发出 DELETE 请求 - 方法不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34912372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com