laravel 6 csrf 令牌每 60 秒就会过期?

问题描述 投票:0回答:2

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

配置/会话

“一生”=> 60,

laravel laravel-8 csrf csrf-token
2个回答
5
投票

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

根据问题(参考:51615122),我们通过添加名为

addCookieToResponse

的新方法来更改 app/Http/Middleware/VerifyCsrfToken.php 中的配置
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"

保存并刷新页面,或清理缓存和配置后,会话生命周期将为两个小时,但 CSRF 将仅为 60 秒。

希望这有效。


0
投票

经过长时间的测试,我最终得到了一些结果,您在会话中放入

lifetime
选项不允许设置以秒为单位的过期时间,它允许以分钟为单位。

所以,当你设置

lifetime = "60"
时,就意味着它将在1小时后过期。

因此,您必须在

lifetime = "1"
文件中设置
config/session.php
。另外,
.env
文件中的默认值
SESSION_LIFETIME=120
您必须将其替换为1
SESSION_LIFETIME = 1

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

php artisan config:cache

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

要查看更多信息,请检查此问题

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.