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 5.3 中 ajax 发布请求中的 CSRF 令牌不匹配异常
laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?