如何在 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

Laravel 5.7 和 Vue 路由模式

仅当用户在 Laravel 5.7 中处于活动状态时才登录用户

419 页面在 laravel 5.7 中过期

如何在 Laravel 5.7 和 Laravel Collective 中使用动作 [重复]

如何在 laravel 5.7 中获取当前视图名称(页面名称)