Apache2环境下React对接Laravel Sanctum出现419错误如何解决
问题排查与解决方案
现有配置问题
你的现有配置存在两处核心错误:
SESSION_DOMAIN配置不符合浏览器规则:.localhost的带点前缀写法在Chrome 80+版本中不会被认可,根域为localhost时不需要加前缀点- 缺少非HTTPS环境的Cookie适配配置:本地http环境下默认开启的Secure属性会阻止Cookie存储
修复步骤
第一步:调整.env配置
替换原有相关配置为以下内容:
SESSION_DRIVER=cookie SESSION_DOMAIN=localhost SESSION_SECURE_COOKIE=false SANCTUM_STATEFUL_DOMAINS=localhost:3000,site.localhost
注意本地开发使用http协议时,SESSION_SECURE_COOKIE必须设为false,带有Secure属性的Cookie只会在https请求下被浏览器存储。
第二步:校验CORS配置(config/cors.php)
确保以下配置项符合要求:
paths数组包含sanctum/csrf-cookie和你的登录接口路径supports_credentials设为trueallowed_origins包含http://localhost:3000
第三步:完善前端请求逻辑
你现有的csrf获取代码是正确的,但所有后续请求(包括登录接口)都必须和csrf请求一样带上credentials: 'include'配置,漏加的话浏览器不会携带存储的Cookie,会直接返回419状态码。
参考登录请求写法:
fetch("http://site.localhost/login", { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-XSRF-TOKEN': decodeURIComponent(document.cookie.split('; ').find(row => row.startsWith('XSRF-TOKEN=')).split('=')[1]) }, credentials: 'include', body: JSON.stringify(loginData) });
第四步:清理Laravel配置缓存
修改完配置后在Laradock工作区执行以下命令清除缓存:
php artisan config:clear php artisan route:clear
验证操作
修改完成后打开浏览器开发者工具的存储面板:
- 请求
sanctum/csrf-cookie后,确认Cookie列表存在XSRF-TOKEN和laravel_session两个Cookie,域为localhost - 确认两个Cookie的
Secure属性为未勾选状态,SameSite属性为Lax
内容的提问来源于stack exchange,提问作者Kaper
相关产品推荐
相关产品推荐

