为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

4 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

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

在 public 文件夹内的主 index.php 文件中,对其进行编辑,并在启动 PHP 标签后在最顶部写入

ob_start()

该函数将获取输出缓冲区的内容并返回一个要发送到浏览器进行渲染的字符串,并删除启动 PHP 之前放置的空格或换行符。

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

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


查看完整回答
反对 回复 2023-08-11
?
当年话下

TA贡献1890条经验 获得超9个赞

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


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

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


$.ajaxSetup({

    headers: {

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

    }

});


查看完整回答
反对 回复 2023-08-11
?
烙印99

TA贡献1829条经验 获得超13个赞

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

所以,如果有人遇到这个问题,我在其他地方还没有找到这个解决方案,这确实花了我几个小时。

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

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

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


查看完整回答
反对 回复 2023-08-11
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

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


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


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

@csrf


  //input fields here

</form>


查看完整回答
反对 回复 2023-08-11
  • 4 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信