iframe 中的 Laravel 项目 - CSRF 令牌不匹配

我有一个项目,我在其中实现了 Sanctum 以用作 api 调用的身份验证。这是我使用它的方式

axios.get('/sanctum/csrf-cookie').then(response => {
   axios.post('/api/login', {data: data})
   .then(response => {
     ...
   })
   .catch(error => {
     ...
   });
});

当我将其作为独立页面运行时,一切正常。但是,一旦我尝试在另一个项目的 iframe 中使用相同的 url 和相同的数据,我就会收到 CSRF token mismatch. 错误。任何指导将不胜感激。

stack overflow Laravel project within iframe - CSRF token mismatch
原文答案

答案:

作者头像

iframe 的使用和安全性取决于用例。

安全方面:

如果您关心安全性,请不要使用 iframe。

看:

StackExchange: What are the security implications of having login dialog inside of an iframe

在指定端点上禁用 CSRF:

如果您有不需要 CSRF 保护的特定路由,则可以在 Http/Middleware/VerifyCsrfToken.php 中为这些路由设置例外

看:

StackOverflow: Laravel 5 TokenMismatchException only in iFrame

全力支持 iframe:

您可以在 config/session.php 中编辑会话设置

看:

StackOverflow: Laravel 5.1 CSRF in iframe, how to make it work?

作者头像

进入 config/session.php,然后改变这个:

'安全' => 环境('SESSION_SECURE_COOKIE',真)

'same_site' => '无',

此外,检查您的 .env 文件中为 SESSION_SECURE_COOKIE 设置的值,如果在 .env 文件中将其设置为 false,则将其更改为 true。