Laravel 应用程序 | 只有 Safari 有时会丢失请求中的 XSRF Coo​​kie

Sta*_*ows 5 cookies safari csrf inertiajs laravel

我们最近部署了一个 Laravel 应用程序,并在我们的应用程序上遇到了一些 Safari 版本的奇怪问题。

当在我们的应用程序上冲浪时,尤其是在用户未经授权的情况下,我们有时会在 Safari 上遇到请求/响应标头中不存在 XSRF 令牌的问题。

在申请表上,缺少令牌会导致 419 页面过期问题。

该问题仅有时出现在某些版本的 Safari 中。大多数情况下,重置缓存和 Cookie 可以解决 1 或 2 个表单请求的问题。

我彻底重置了 Safari

  • 允许的 Cookie
  • 允许追踪
  • 禁用的插件

技术

我们使用 PHP 8.0 和最新的 Laravel 版本。对于前端,有一个 vue.js 应用程序,以惯性.js 作为连接器。关于将 csrf-token 传递到前端,不需要进一步配置来传递 csrf-token。(来源

在此输入图像描述

我尝试捕获 TokenMismatchExpection 但不可能只有 HTTPException 有效。

我的问题是:

  • 有人遇到类似的问题吗?我怎样才能防止它们?

附上一些 Laravel 调试栏屏幕截图。

Safari 14.03 | 左侧 右侧镀铬

在此输入图像描述

页面过期屏幕

在此输入图像描述

Joh*_*ees 3

我遇到了同样的问题。我将问题归咎于 Safari 在通过其他站点的链接打开页面时忽略“Set-Cookie”响应标头。(就我而言,它是在 MailHog 中打开的电子邮件中的链接)。如果手动在新选项卡中打开链接,问题就消失了。

由于缺少XSRF-TOKENcookie,axios 不会X-XSRF-TOKEN在来自 Laravel 的请求中设置标头419

到目前为止,我还没有找到X-XSRF-TOKEN手动注入标头的可行解决方案,因为中间件VerifyCsrfToken期望令牌是加密的 cookie。

  • 我可以确认这种行为。您找到解决方案了吗? (2认同)