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



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

419页已过期

我知道通常丢失CSRF令牌将是主要问题,但在这方面,我添加了CSRF令牌,我使用LARAVEl刀片语法,因此添加LARAVEl刀片形式语法是";令牌";(CSRF)将直接添加。

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

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

我已经检查了什么?

  • CSRF Token未在Form中丢失
  • 我也检查了中间件,但这个请求在表单提交后没有到达中间件,它将进入419页面
  • 也尝试使用php artisan cache:cleardump-autoload命令,但问题仍然存在
  • 还为storagevendorcache文件夹添加了755权限

请在这方面帮助我我接下来需要检查什么来解决这个问题

Laravel"419页过期";错误疑难解答步骤

应用/执行所有步骤,直到";步骤12";在测试应用程序是否存在此错误之前

  1. 增加会话到期时间(即24小时)
  2. 确保";会话域";是相同的";应用URL">
  3. 确保会话cookie被发送回服务器;HTTP""HTTPS";浏览器连接

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

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

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

附录1:

  1. 如果您安装并启用了Laravel Sanctum,请将您的应用程序域添加到";圣地状态域">

.env文件内容

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

SANCTUM_STATEFUL_DOMAINS="myapp.local"

附录2:

  1. 确保您的";会话驱动程序";不是空的。默认值是";文件">

.env文件内容

SESSION_DRIVER=file

附录3:

  1. 禁用浏览器缓存。这在你的发展过程中可能是有益的。

  2. 打开web浏览器,导航到应用程序的主页,重新加载当前页面,忽略缓存的内容。(即:在Windows上:Shift + F5Ctrl + Shift + r,在Mac上⌘ + Shift + r)。

  3. 测试您的应用程序检查您是否仍然收到错误。

附录4(可选):

只有当您到达步骤12并且仍然存在相同错误时,才执行以下步骤

A。清除所有web浏览器缓存&饼干测试您的应用程序

B。打开一个完全不同的web浏览器,然后再次测试。如果你一直在使用谷歌浏览器/Safari,请尝试使用Firefox进行测试测试您的应用程序

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

如果将SESSION_SECURE_COOKIE标志设置为true,然后在不安全的连接下发出请求,例如通过http://yourdomain.com而不是https://yourdomain.com.设置的cookie标头将被阻止,因为它是在不安全的连接下接收的,因此导致了上述会话问题。

这可能是一种边缘情况,但如果您使用的是数据库驱动程序和非正常递增ID的用户ID(即ULID或UUID),请确保sessions表中的user_id字段反映了用户ID的正确格式。

1-php artisan route:clear

2-转到CSRF中间件并尝试添加"*"到您的除外阵列

当我遇到这种情况时,是因为我忘记将"name"属性添加到形式的输入中

最新更新