繁体   English   中英

如何解决 Laravel 中的“CSRF 令牌不匹配”

[英]How to solve "CSRF Token Mismatch" in Laravel

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

我曾经在 cPanel 中托管时遇到了同样的错误,我花了将近 3 天的时间来找出我的案例的解决方案。 我不知道这是否适合你,但试试看。

在公共文件夹中的主 index.php 文件中,编辑它并在启动 PHP 标签后的最顶部,写入

ob_start()

此 function 将获取 output 缓冲区的内容并返回一个字符串,该字符串将发送到浏览器进行渲染,并删除您在启动 Z2FEC392304A5C23AC17CZCZF9 之前放置的空格或换行符。

另外,请尝试按照评论中的建议清除缓存。

让我知道这是否对您也有帮助。

将以下行添加到 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')
    }
});

I had this very same problem, receiving the "CSRF Token Mismatch" exception in Laravel 7, having fixed everything else, like setting the csrf token on page header, in ajax requests, clearing the cache, anything you can think of and usually find in解决方案建议。

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

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

我从字面上使用了我当地的 IP,而不是使用“localhost”这个词。

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

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

我遇到了这个问题。 我在 Laravel 文档本身中找到了解决方案。

我们可以在表单元素之后添加$csrf

<form method="POST" action="/profile">
@csrf

  //input fields here
</form>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM