csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配

Posted

技术标签:

【中文标题】csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配【英文标题】:csrf token automatically regenerate on each request in laravel which cause csrf token mismatch on production server 【发布时间】:2020-04-20 21:26:51 【问题描述】:

Csrf 令牌会在 Laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配。在本地服务器上它工作正常我还在产品服务器上的verifiedCSRFToken.php文件上打印两个令牌

 $token = $this->getTokenFromRequest($request);
             echo $request->session()->token();
             echo "====";
             echo $token;
             die('Hi');

$token 保持不变,但 $request->session()->token() 总是在产品服务器上更改

【问题讨论】:

这将永远改变,因为它在 laravel 中增加了安全性 但由于这种安全性,ajax 无法正常工作,并且每次都显示 CSRF 令牌不匹配。 你应该检查这个***.com/questions/32738763/… 亲爱的,在本地机器上一切正常。即使我已经设置了 "_token": " csrf_token() 并且还在 ajax 标头中但仍然是同样的错误。 【参考方案1】:

我遇到了同样的问题,我所做的是:

首先在您的 .env 文件中删除:设置会话驱动程序,例如:SESSION_DRIVER=file(如果您希望将其保存到文件中)

然后执行:php artisan cache:clear 然后 php artisan config:clear

这对我有用。

忘记签出.env应用模式

【讨论】:

我们已经尝试过这个过程,但仍然显示相同的错误。 实际上 XSRF-TOKEN cookie 没有在服务器上生成【参考方案2】:

如果您在一页内发送许多 ajax 请求,我建议您以这种方式使用令牌 <meta name="csrf-token" content="!! csrf_token() !!">。并通过'_token': $('meta[name="csrf-token"]').attr('content'),获取它

【讨论】:

亲爱的问题是在本地服务器上工作的所有东西在本地服务器 cookie 上都是由 laravel 生成的,但在生产服务器上它不会生成 cookie。这就是它显示 csrf 令牌不匹配的原因。由于这个 laravel 每次在会话中都会生成新的 csrf 令牌。【参考方案3】:

_________(在你的路由文件或任何其他 laravel 文件中 php 标签前的空格会导致 laravel 出现意外问题)

【讨论】:

以上是关于csrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Laravel CSRF 令牌

角度中的 CSRF 令牌与 Laravel 5 不同

本地主机上 laravel 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常

laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?

Laravel 4.2 根据请求频率生成新的 CSRF 令牌?

页面中所有表单的 Laravel 5 CSRF 全局令牌隐藏字段