📅  最后修改于: 2023-12-03 15:24:14.973000             🧑  作者: Mango
在 Laravel 中,当我们提交表单时,有时会遇到一个错误页面,错误代码为 419 - PHP。这通常表示我们的 CSRF 令牌已过期或未传递。
这个问题很常见,但解决起来也很容易。
csrf_token()
函数在使用 POST
方法提交表单时,我们需要在表单中包含一个 CSRF 令牌,以确保请求是安全的。
在 Laravel 中,我们可以使用 csrf_token()
函数生成一个 CSRF 令牌:
<form method="POST" action="{{ route('example.store') }}">
@csrf
<!-- 表单内容 -->
</form>
这样,在提交表单时,系统会自动验证我们的 CSRF 令牌,并保护我们的应用程序免受跨站点脚本攻击。
csrf
中间件在 Laravel 中,默认情况下,所有使用 web
中间件组的路由都会自动包含 VerifyCsrfToken
中间件。这个中间件会验证请求中的 CSRF 令牌。
如果您的应用程序修改了中间件的默认设置,或者您的表单使用了不同的中间件组,请确保您的路由使用正确的中间件,并包含了 VerifyCsrfToken
中间件。
您可以在 app/Http/Kernel.php
文件中查看默认的 web
中间件组设置:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
// ...
];
最后,如果上述两种方法都不能解决问题,我们需要检查表单中发送的数据是否符合要求。
请确保您提交的表单数据不包含任何非法字符或内容,并且确保您的表单数据与您的控制器方法预期的数据一致。
如果您在表单中使用了 AJAX,您还需要确保 AJAX 请求头中包含了正确的 CSRF 令牌。
在 Laravel 中,遇到 419 - PHP 错误页面通常是 CSRF 令牌验证失败的结果。通过正确使用 csrf_token()
函数,检查 csrf
中间件和表单数据,我们可以很容易地解决这个问题。