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 错误代码并呈现该文件而不是呈现错误来处理 HttpExceptions糟糕或 Synfony。

Out-of-the-box、Laravel 附带 401403404419429 的错误文件, 500503 错误页面。这些位于:

/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 作为评论。