Laravel 带有 csrf 的 Yajra 数据表操作按钮仍然抛出 419
Laravel Yajra datatables action button with csrf still throws 419
我正在使用 Laravel 的 Yajra 数据表来显示带有 post 按钮操作的文件列表。
我有这个下载按钮和 post 方法来检查授权是否允许用户下载当前文件。
我检查了该页面,确实看到了 CSRF 令牌。然而,Laravel 仍然抛出 419 错误。
这是一段控制器代码,我在其中使用其 CSRF 令牌在表单中生成一个 post 按钮:
return DataTables::of($mediaItems)
//...
//ACTION BUTTONS
->addColumn('action',function (Media $file){
$button = '<form method="post" action="'.route('download.file',['media'=>$file]).'">
<meta name="csrf-token" content="'.csrf_token().'">
<button type="submit" name="download" class="btn btn-info" title="Download file"><i class="fas fa-file-download"></i></button>
</form> ';
return $button;
})
->toJson();
在 Web 浏览器的检查元素视图中,这是我看到的:
<form method="post" action="http://myApp.local/file/download/z271dd4u-b0a2-44f6-a0a5-cmxd33de3e15">
<meta name="csrf-token" content="O02W6Fu9BoW1futzAL06BbFmDfsS8lgmmx4Vd05A">
<button type="submit" name="download" class="btn btn-info" title="Download"><i class="fas fa-file-download"></i></button>
</form>
当我点击下载按钮时,为什么我仍然得到 419 页面过期 错误?
您必须将 csrf 令牌作为值传递。当您在表单中使用 @csrf
并检查表单时,您会发现,它会生成一个名为 _token
且值为 csrf token 的隐藏输入字段。您不能使用元标记通过请求传递值。所以改为使用隐藏的输入字段。
<input type="hidden" name="_token" value=" '.csrf_token().' ">
我正在使用 Laravel 的 Yajra 数据表来显示带有 post 按钮操作的文件列表。
我有这个下载按钮和 post 方法来检查授权是否允许用户下载当前文件。
我检查了该页面,确实看到了 CSRF 令牌。然而,Laravel 仍然抛出 419 错误。
这是一段控制器代码,我在其中使用其 CSRF 令牌在表单中生成一个 post 按钮:
return DataTables::of($mediaItems)
//...
//ACTION BUTTONS
->addColumn('action',function (Media $file){
$button = '<form method="post" action="'.route('download.file',['media'=>$file]).'">
<meta name="csrf-token" content="'.csrf_token().'">
<button type="submit" name="download" class="btn btn-info" title="Download file"><i class="fas fa-file-download"></i></button>
</form> ';
return $button;
})
->toJson();
在 Web 浏览器的检查元素视图中,这是我看到的:
<form method="post" action="http://myApp.local/file/download/z271dd4u-b0a2-44f6-a0a5-cmxd33de3e15">
<meta name="csrf-token" content="O02W6Fu9BoW1futzAL06BbFmDfsS8lgmmx4Vd05A">
<button type="submit" name="download" class="btn btn-info" title="Download"><i class="fas fa-file-download"></i></button>
</form>
当我点击下载按钮时,为什么我仍然得到 419 页面过期 错误?
您必须将 csrf 令牌作为值传递。当您在表单中使用 @csrf
并检查表单时,您会发现,它会生成一个名为 _token
且值为 csrf token 的隐藏输入字段。您不能使用元标记通过请求传递值。所以改为使用隐藏的输入字段。
<input type="hidden" name="_token" value=" '.csrf_token().' ">