【问题标题】:Error 419 Page Expired. Laravel Yajra datatables错误 419 页面已过期。 Laravel Yajra 数据表
【发布时间】:2020-10-23 10:08:32
【问题描述】:

我正在尝试添加一个表单按钮来删除记录,但由于某种原因,csrf 令牌没有插入它。我已经尝试了很多方法,但我无法让它发挥作用。有什么建议吗?

<div class="row">
    <a href="{{ route('publicaciones.show', $id)}}" class="btn btn-success btn-sm h-25 d-inline-block mr-3">Ver</a>
    <a href="{{ route('publicaciones.show', $id)}}" class="btn btn-primary btn-sm h-25 d-inline-block">Editar</a>

    <form method="POST" action="{{ url("publicaciones/{$id}") }}" class="col">
         @csrf

        @method('DELETE')
        <button class="btn btn-danger btn-sm" type="submit" id="eliminar">Eliminar</button>

    </form>
</div>

附图:

【问题讨论】:

  • Laravel 7.0 版
  • 是的,是刀片代码
  • 试试这个{{ csrf_field() }}
  • 我已经试过了,效果完全一样

标签: laravel datatables yajra-datatable laravel-datatables


【解决方案1】:

通常您的路由不使用网络中间件。确保您使用routes/web.php 作为路由,并确保RouteServiceProvider 具有Route::middleware('web') 示例:

/**
 * Define the "web" routes for the application.
 *
 * These routes all receive session state, CSRF protection, etc.
 *
 * @return void
 */
protected function mapWebRoutes()
{
    Route::middleware('web')->namespace($this->namespace)->group(base_path('routes/web.php'));
}

或者您可以手动添加到每个使用的路线,如下所示:

Route::group(['middleware' => ['web']], function () {

    // your routes here

});

正如RouteServiceProvider 评论的那样,网络中间件将使您的路由接收会话状态、CSRF 保护等。

【讨论】:

  • 我认为问题不在于这个,因为任何其他视图中的CSRF都会添加它并且它们具有相同的路由。我认为问题来了是因为这个数据表使用了 ajax,并且由于某种我不知道的原因,它没有插入 CSRF。
  • 怎么调用ajax路由,在哪里?
  • 对不起。你说得对。数据表由 API 路由加载。多亏了你的信息,我已经解决了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2020-06-02
  • 2020-05-22
  • 2022-06-11
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
相关资源
最近更新 更多