如何在 Laravel 中解决 "CSRF Token Mismatch"

How to solve "CSRF Token Mismatch" in Laravel

我正在开发 laravel 应用程序。在我的域上托管它后,我 运行 陷入“CSRF 令牌不匹配”错误。在本地,应用程序运行良好,因为我已将 csrf 令牌包含在 header 中,如文档中所示。因此,csrf 令牌已成功生成并包含在请求的 header 中。在进行一些调试时,我将 env 文件中的 SESSION_DRIVER 更改为 file 以便我可以看到会话。我意识到正在为一个用户生成多个会话。 SESSION_LIFETIME 设置为 120,我认为这没问题。在查看 storage/framework/sessions 中存储的会话中的令牌时,none 包含浏览器生成的令牌。可能是什么问题?请记住,它在本地运行良好。主机域上的哪些配置可能会影响应用程序的会话。

我曾经 运行 在 cPanel 中托管时遇到同样的错误,我花了将近 3 天的时间才找到解决方案。 我不知道这是否适合您,但请尝试一下。

在 public 文件夹内的主要 index.php 文件中,编辑它并在最上面写 ob_start()

此函数将获取输出缓冲区的内容和 returns 一个要发送到浏览器进行呈现的字符串,并删除您在开始前放置的空格或换行符 php。

也尝试按照评论中的建议清除缓存。

如果这对您也有帮助,请告诉我。

将以下行添加到 head 标记中。

<meta name="csrf-token" content="{{ csrf_token() }}"> // Add in <head></head>

然后get就可以在Laravel中得到这个内容属性了。此外,在您的脚本标记中,添加以下代码(这是为了确保在您提交表单时获得正确的 csrf_token)。

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

我遇到了同样的问题,在 Laravel 7 中收到“CSRF 令牌不匹配”异常,修复了其他所有问题,例如在页眉上设置 csrf 令牌,在 ajax 请求中,清除缓存,任何你能想到的,通常在解决方案建议中找到的东西。

所以,如果有人遇到这个问题,我在其他任何地方都找不到这个解决方案,而且它真的花了我几个小时。

我调用了错误的应用程序URL!

我按字面意思使用了我的本地 IP,而不是使用“localhost”这个词。

因此,如果您在本地开发,使用您的 IP 调用您的应用程序,请尝试在 http://localhost 上调用它!

与@cslotty 不同,在我的情况下,我实际上必须将 URL 从 'localhost' 更改为“127.0.0.1”才能正常工作。我的前端在 React 中,后端在 Laravel 8.