如何在Laravel中为每个用户请求生成新的CSRF令牌?

时间:2019-01-09 09:43:06

标签: php laravel laravel-5

我想为每个请求用户生成新的CSRF令牌。我确实知道此技术不好,并且不允许用户同时提出请求。但是我仍然希望实现它。

我在 Middleware / VerifyCsrfToken 中具有覆盖功能 addCookieToResponse 。通过添加 $ request-> session()-> regenerateToken()

protected function addCookieToResponse($request, $response)
{
    $config = config('session');
    $request->session()->regenerateToken();

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

    return $response;
}

令牌不断变化,但是在POST请求期间,由于 csrf_token()令牌过旧,我收到TokenMismatchExcemption。似乎在addCookieToResponse()之前调用了crsf_token()。有没有更好的方法来实现这项技术?

1 个答案:

答案 0 :(得分:0)

您想要实现的目标有点奇怪,但我认为这就像是一个后继的中间件:

$response = $next($request); // process petition

$request->session()->regenerateToken(); // regenerate token

return $response; // send response

请分享结果