如何在 laravel 5.7 中删除用户? [复制]
Posted
技术标签:
【中文标题】如何在 laravel 5.7 中删除用户? [复制]【英文标题】:How to delete user in laravel 5.7? [duplicate] 【发布时间】:2019-06-15 17:02:03 【问题描述】:我正在将我的应用从 laravel 4.2 迁移到 5.7。 我有这个逻辑来删除用户: 此操作在点击时触发
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
)
$.ajax(
type: "DELETE",
url: " URL::to('administrator/admin-delete') "+"/"+id
);
在我的路线文件中:
Route::delete('admin-delete', 'UsersController@removeAdminDelete');
在我的控制器中:
public function removeAdminDelete($id)
$user = Admin::find($id);
File::delete($user->photo);
$user->delete();
Session::flash('successDelete', "ok");
if(Auth::user()->id == $id)
Auth::user()->logout();
return Redirect::to("administrator");
else
return Redirect::back();
当我尝试删除用户时,我在控制台中收到此错误:
删除 my_delete_url 419(未知状态)!!
编辑后出现 404 错误!!
【问题讨论】:
【参考方案1】:Laravel 中的 419 错误意味着你没有为 csrf
提供令牌。
如dos 所示,您可以将meta
标记添加到您的页面头部,其标记位于:
<meta name="csrf-token" content=" csrf_token() ">
然后设置您的 ajax 请求以始终包含它:
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
NB 确保在您拉入 jQuery 之后和发出 ajax 请求之前添加上述代码。
此外,您的路线应该使用delete
而不是resource
。
改变
Route::resource('admin-delete', 'UsersController@removeAdminDelete');
到
Route::delete('admin-delete/id', 'UsersController@removeAdminDelete');
【讨论】:
我正在编辑我的问题以显示我应用的修改 @YoussefBoudaya 我错过了路线的id
参数。我已经更新了我的答案(特别是 Route::delete(...)
位)。
是的,这就是导致问题的原因,并且添加 ajaxsetup 解决了它
@YoussefBoudaya 如果这回答了您的问题,请您将其标记为已接受:) 谢谢。【参考方案2】:
好像和csrf token有关。尝试像这样在您的 ajax 调用中添加 csrf 令牌:
<meta name="csrf-token" id="csrftoken" content=" csrf_token() ">
并使用此标头设置您的 ajax:
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('#csrftoken').attr('content')
);
【讨论】:
我已经在我的主布局中放置了元标记。我应该如何添加 ajax 设置? 只需在 $.ajax(...) 之前添加 $.ajaxSetup( ... )【参考方案3】:在结束表单标签之前添加这样的
<form action='' method='post'>
......
@csrf
</form>
【讨论】:
以上是关于如何在 laravel 5.7 中删除用户? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
仅当用户在 Laravel 5.7 中处于活动状态时才登录用户