我正在开发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:clear
和dump-autoload
命令,但问题仍然存在 - 还为
storage
、vendor
和cache
文件夹添加了755权限
请在这方面帮助我我接下来需要检查什么来解决这个问题
Laravel"419页过期";错误疑难解答步骤
应用/执行所有步骤,直到";步骤12";在测试应用程序是否存在此错误之前
- 增加会话到期时间(即24小时)
- 确保";会话域";是与相同的";应用URL">
- 确保会话cookie被发送回服务器;HTTP"";HTTPS";浏览器连接
.env文件内容应用上述3个步骤
将myapp.local更改为您的应用程序域。
APP_URL="http://myapp.local"
SESSION_LIFETIME=1440
SESSION_DOMAIN=myapp.local
SESSION_SECURE_COOKIE=false
- 确保在提交(
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.php和sources/views/layouts/guest.blade.php以及resources/views/welcome.blade.hp<meta name="csrf-token" content="{{ csrf_token() }}">
- 然后,定义所需的HTTP请求头并重新编译应用程序的静态资产(
npm run dev
)资源/js/app.js
- 添加此";15标签"CCD_;在所有主VIEW模板/布局的
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
"X-Requested-With": "XMLHttpRequest"
}
});
- 自动重新生成应用程序密钥。(即:
php artisan key:generate
) - 清除应用程序缓存。(即:
php artisan cache:clear
) - 确认应用程序调用程序具有读取&在应用程序的";会话"";高速缓存";文件夹(即:
chmod -R 755 storage && chmod -R 755 "storage/framework/sessions" && chmod -R 755 "bootstrap/cache"
)
附录1:
- 如果您安装并启用了Laravel Sanctum,请将您的应用程序域添加到";圣地状态域">
.env文件内容
将myapp.local更改为您的应用程序域。
SANCTUM_STATEFUL_DOMAINS="myapp.local"
附录2:
- 确保您的";会话驱动程序";不是空的。默认值是";文件">
.env文件内容
SESSION_DRIVER=file
附录3:
禁用浏览器缓存。这在你的发展过程中可能是有益的。
打开web浏览器,导航到应用程序的主页,重新加载当前页面,忽略缓存的内容。(即:在Windows上:
Shift + F5
或Ctrl + Shift + r
,在Mac上:⌘ + Shift + r
)。测试您的应用程序检查您是否仍然收到错误。
附录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"属性添加到形式的输入中