首页 > 解决方案 > 如何为 Laravel 中的每个用户请求生成新的 CSRF Token?

问题描述

我想为用户提出的每个请求生成新的 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()。有没有更好的方法来实现这种技术?

标签: phplaravellaravel-5

解决方案


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

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

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

return $response; // send response

请分享结果


推荐阅读