【问题标题】:laravel 6 csrf token expired in every 60 seconds?laravel 6 csrf 令牌每 60 秒过期一次?
【发布时间】:2022-02-13 17:34:44
【问题描述】:

我正在使用 laravel 6。我希望我的 laravel CSRF 令牌每 60 秒过期一次。

配置/会话

'寿命' => 60,

【问题讨论】:

  • 您使用的是哪个 SESSION_DRIVER? case csrf token 默认会过期
  • 是的,它将在 1 周内过期,但我希望在 1 分钟内过期。
  • 好的,只需将 SESSION_LIFETIME=1 放入您的 .env 文件中
  • 无效,已检查。
  • 你能给我整个场景吗

标签: laravel laravel-8 csrf csrf-token


【解决方案1】:

首先,CSRF 存储在 XSRF-TOKEN cookie 中。参考:50904763

根据问题(Ref:51615122),我们更改app/Http/Middleware/VerifyCsrfToken.php中的配置,添加一个名为addCookieToResponse的新方法

use Symfony\Component\HttpFoundation\Cookie;

public function addCookieToResponse($request, $response) {
    $config = config('session');
    $session_life = env('CSRF_LIFE');

    $response->headers->setCookie(
        new Cookie(
            'XSRF-TOKEN', $request->session()->token(), $this->availableAt($session_life),
            $config['path'], $config['domain'], $config['secure'], false, false, $config['same_site'] ?? null
        )
    );
}

其中$config 用于从现有生命周期中获取会话信息。但是,我从 .env 解析 $session_life 以确保您可以尽可能多地自定义。

因此,结果很简单,将所有内容配置为属于 $this->availableAt($session_life) 区域,其中 session_life 以秒为单位。

所以,请在 .env 中将session_life 设置为 60,如下所示:

CSRF_LIFE="60"

在您保存并刷新页面,或清理缓存和配置后,Session LifeTime 将是两个小时,但 CSRF 将只有 60 秒。

希望这行得通。

【讨论】:

    【解决方案2】:

    经过长时间的测试,我最终得到了一些结果,您在会话中放入 lifetime 选项不允许以秒为单位设置过期时间,它允许以分钟为单位。

    所以,当你设置liftime = "60"时,这意味着它将在1小时后过期。

    因此,您必须在 config/session.pph 文件中设置 liftime = "1"。此外,.env 文件中的默认值 SESSION_LIFETIME=120 您必须将其替换为 1 SESSION_LIFETIME = 1。

    之后你必须通过命令清除缓存:-

    php artisan config:cache

    现在,您的会话将在 1 分钟/60 秒后过期。

    要查看更多信息,请查看question。

    谢谢,快乐编码?

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 2017-08-23
      • 1970-01-01
      • 2020-05-02
      • 2012-01-09
      • 2022-08-18
      • 2014-05-17
      • 2020-09-18
      • 2011-03-09
      相关资源
      最近更新 更多