laravel 表单提交显示 419 页面已过期
laravel form submission showing 419 page expired
为什么我在表单上收到 419 错误 submitting.I 已尝试更改环境并启用调试 true.But 仍然没有收到错误只是收到 419 页 expired.I 知道我为什么由于缺少 crsf 字段而获取此页面。但我想看到页面过期以外的实际错误。
在表单字段上添加@csrf 标记。
<form action="" method="">
@csrf
.
.
</form>
逻辑如下:
@csrf
或 {{csrf_field()}}
使用 csrf_token
创建输入。 Laravel post 请求搜索 _token
。如果它不存在,它看起来 x-csrf-token
。
在这个文件中:
laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken
于 tokensMatch()
。
然后如果token不存在,则抛出异常。
在这里:laravel/framework/src/Illuminate/Foundation/Exceptions
prepareException()
如果您正在使用 Ajax 调用只需在发送方法之前添加
beforeSend: function(xhr, type) {
if (!type.crossDomain) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
}
},
别忘了添加 Meta 标签
<meta name="csrf-token" content="{{ csrf_token() }}">
然后它中止 419。我的意思是没有真正的错误。它只是中止错误页面。
您看不到实际错误的原因是 Laravel 通过检查文件是否存在特定 HTTP 错误代码并呈现该文件而不是呈现错误来处理 HttpException
s糟糕或 Synfony。
Out-of-the-box、Laravel 附带 401
、403
、404
、419
、429
的错误文件, 500
和 503
错误页面。这些位于:
/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views
如果您想在调试启用时禁用此行为并且您不在生产中,那么您可以将以下方法添加到您的 app/Exceptions/Handler.php
class:
protected function renderHttpException(HttpExceptionInterface $e)
{
if (app()->environment() !== 'production' && config('app.debug')) {
return $this->convertExceptionToResponse($e);
}
return parent::renderHttpException($e);
}
以上将阻止Laravel检查异常是否有特定的错误文件。
我正在扯头发,因为在我的情况下,它只发生在一个 POST url 上,我试图将文章 post 更新到我的后端。
令牌始终存在,会话文件夹没有权限问题,没有空格,重新生成应用程序密钥没有帮助。我 运行 不知所措,尤其是在更新不同的文章时 post 工作正常。
就我而言,帮助清除整个应用程序的 Cloudflare 缓存。 (我的 Laravel 应用位于 Cloudflare DNS 后面)。清除缓存后,我就可以在仪表板中提交表单了。
我仍然不知道罪魁祸首是什么,但是因为错误 419 现在消失了,我正在 posting 这个 - 也许它会有所帮助,如果你知道罪魁祸首,请 post 作为评论。
为什么我在表单上收到 419 错误 submitting.I 已尝试更改环境并启用调试 true.But 仍然没有收到错误只是收到 419 页 expired.I 知道我为什么由于缺少 crsf 字段而获取此页面。但我想看到页面过期以外的实际错误。
在表单字段上添加@csrf 标记。
<form action="" method="">
@csrf
.
.
</form>
逻辑如下:
@csrf
或 {{csrf_field()}}
使用 csrf_token
创建输入。 Laravel post 请求搜索 _token
。如果它不存在,它看起来 x-csrf-token
。
在这个文件中:
laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken
于 tokensMatch()
。
然后如果token不存在,则抛出异常。
在这里:laravel/framework/src/Illuminate/Foundation/Exceptions
prepareException()
如果您正在使用 Ajax 调用只需在发送方法之前添加
beforeSend: function(xhr, type) {
if (!type.crossDomain) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
}
},
别忘了添加 Meta 标签
<meta name="csrf-token" content="{{ csrf_token() }}">
然后它中止 419。我的意思是没有真正的错误。它只是中止错误页面。
您看不到实际错误的原因是 Laravel 通过检查文件是否存在特定 HTTP 错误代码并呈现该文件而不是呈现错误来处理 HttpException
s糟糕或 Synfony。
Out-of-the-box、Laravel 附带 401
、403
、404
、419
、429
的错误文件, 500
和 503
错误页面。这些位于:
/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views
如果您想在调试启用时禁用此行为并且您不在生产中,那么您可以将以下方法添加到您的 app/Exceptions/Handler.php
class:
protected function renderHttpException(HttpExceptionInterface $e)
{
if (app()->environment() !== 'production' && config('app.debug')) {
return $this->convertExceptionToResponse($e);
}
return parent::renderHttpException($e);
}
以上将阻止Laravel检查异常是否有特定的错误文件。
我正在扯头发,因为在我的情况下,它只发生在一个 POST url 上,我试图将文章 post 更新到我的后端。
令牌始终存在,会话文件夹没有权限问题,没有空格,重新生成应用程序密钥没有帮助。我 运行 不知所措,尤其是在更新不同的文章时 post 工作正常。
就我而言,帮助清除整个应用程序的 Cloudflare 缓存。 (我的 Laravel 应用位于 Cloudflare DNS 后面)。清除缓存后,我就可以在仪表板中提交表单了。
我仍然不知道罪魁祸首是什么,但是因为错误 419 现在消失了,我正在 posting 这个 - 也许它会有所帮助,如果你知道罪魁祸首,请 post 作为评论。