【问题标题】:csrf token automatically regenerate on each request in laravel which cause csrf token mismatch on production servercsrf 令牌会在 laravel 中的每个请求上自动重新生成,这会导致生产服务器上的 csrf 令牌不匹配
【发布时间】: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 令牌不匹配。
  • 亲爱的,在本地机器上一切正常。即使我已经设置了 "_token": "{{ csrf_token() }} 并且还在 ajax 标头中但仍然是同样的错误。

标签: php laravel laravel-5.8


【解决方案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 出现意外问题)

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 2013-04-25
    • 2018-07-29
    • 1970-01-01
    • 2019-02-27
    • 2012-09-18
    • 1970-01-01
    • 2015-12-20
    • 2014-11-04
    相关资源
    最近更新 更多