Laravel 中的 419 页面即使在添加 CSRF 令牌后也已过期

alw*_*ner 8 php post csrf laravel laravel-8

我正在开发 Laravel 8 框架,我已在实时 Cpanel 服务器上添加了该应用程序,然后它开始显示以下错误:

419 页已过期

我知道通常缺少 CSRF 令牌将是主要问题,但在此,我添加了 CSRF 令牌,我使用 LARAVEl Blade 语法,因此添加 LARAVEL Blade 表单语法将直接添加“令牌”(CSRF)。

 {{ Form::open( [ "url" => \URL::route("front.login.check"), "autocomplete"=>false,"id" => "login_form" ] ) }}
Run Code Online (Sandbox Code Playgroud)

这会自动添加CSRF,我尝试过直接添加,但是每个POST请求最终都会出现在419 PAGE EXPIRED页面上。

我已经检查了什么?

  • CSRF Token中并没有缺失Form
  • 我也检查了中间件,但在表单提交后,此请求未到达中间件,它将发送到419页面
  • 也尝试php artisan cache:cleardump-autoload命令,但问题仍然存在。
  • 还为、和文件夹添加了755权限。storagevendorcache

请帮我解决这个问题,接下来我需要检查什么才能解决这个问题?

ste*_*gwa 13

Laravel“419 页面已过期”错误故障排除步骤

\n

在测试您的应用程序是否存在此错误之前,应用/完成“步骤 12”之前的所有步骤。

\n
    \n
  1. 增加会话过期时间(即 24 小时)。
  2. \n
  3. 确保“会话域与“应用程序 URL”
  4. \n
  5. 确保“HTTP”和“HTTPS”浏览器连接的会话 cookie 被发送回服务器
  6. \n
\n

.env 文件内容应用上述 3 个步骤。

\n

更改myapp.local更改为您的应用程序域。

\n
APP_URL="http://myapp.local"\nSESSION_LIFETIME=1440\nSESSION_DOMAIN=myapp.local\nSESSION_SECURE_COOKIE=false\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 确保您提交了 CSRF 令牌以及您的 ( PUT/ POST/DELETE /等)HTTP 请求一起提交。
  2. \n
\n
    \n
  • (即:确保此请求参数与您的 HTML 表单请求一起提交<input type="hidden" name="_token" value="{{ csrf_token() }}" />)。
  • \n
  • 如果您在应用程序中发出 AJAX 请求,则可以将所有 AJAX 请求配置为始终发送 CSRF 令牌。\n
      \n
    • 将此“<meta>标签”添加到<head>所有主 VIEW 模板/布局的标签内。即:resources/views/layouts/app.blade.phpresources/views/layouts/guest.blade.phpresources/views/welcome.blade.php \n
        \n
      • <meta name="csrf-token" content="{{ csrf_token() }}">
      • \n
      \n
    • \n
    • 然后,定义所需的 HTTP 请求标头并重新编译应用程序的静态资产 ( npm run dev)。资源/js/app.js
    • \n
    \n
  • \n
\n
$.ajaxSetup({\n    headers: {\n        "X-CSRF-TOKEN": $(\'meta[name="csrf-token"]\').attr("content"),\n        "X-Requested-With": "XMLHttpRequest"\n    }\n});\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 自动重新生成您的应用程序密钥。(IE:php artisan key:generate)。
  2. \n
  3. 清除您的应用程序缓存。(IE:php artisan cache:clear)。
  4. \n
  5. 确认应用程序调用者在应用程序的“会话”和“缓存”文件夹中具有读写权限。(IE:chmod -R 755 storage && chmod -R 755 "storage/framework/sessions" && chmod -R 755 "bootstrap/cache")。
  6. \n
\n

附录 1:

\n
    \n
  1. 如果你有Laravel Sanctum,请将您的应用程序域添加到“sanctum 有状态域”的白名单中。
  2. \n
\n

.env 文件内容

\n

更改myapp.local更改为您的应用程序域。

\n
SANCTUM_STATEFUL_DOMAINS="myapp.local"\n
Run Code Online (Sandbox Code Playgroud)\n

附录2:

\n
    \n
  1. 确保您的“会话驱动程序”不为空。默认值为“文件”
  2. \n
\n

.env 文件内容

\n
SESSION_DRIVER=file\n
Run Code Online (Sandbox Code Playgroud)\n

附录3:

\n
    \n
  1. 禁用浏览器缓存。这在您的开发过程中可能是有益的。

    \n
  2. \n
  3. 打开网络浏览器,导航到应用程序的主页,重新加载当前页面,忽略缓存的内容。(即:在Windows上:Shift + F5或在MacCtrl + Shift + r 上:\xe2\x8c\x98 + Shift + r

    \n
  4. \n
  5. 测试您的应用程序!检查您是否仍然收到该错误。

    \n
  6. \n
\n

附录 4(可选):

\n

仅当您到达步骤 12 并且仍然出现相同错误时,才执行以下步骤。

\n

A.清除所有网络浏览器缓存和 cookie测试您的应用程序!

\n

B. 打开一个完全不同的网络浏览器并再次测试。如果您一直使用Google Chrome / Safari,请尝试使用Firefox进行测试。测试您的应用程序!

\n

C. 重新启动计算机并再次测试。测试您的应用程序!

\n