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

sou*_*ngh 1 csrf laravel csrf-token laravel-8

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

配置/会话

'一生' => 60,

小智 5

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

根据问题(参考: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
        )
    );
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

CSRF_LIFE="60"
Run Code Online (Sandbox Code Playgroud)

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

希望这有效。

CSRF Coo​​kie 时间为 1 分钟