我想为每个请求用户生成新的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()。有没有更好的方法来实现这项技术?
答案 0 :(得分:0)
您想要实现的目标有点奇怪,但我认为这就像是一个后继的中间件:
$response = $next($request); // process petition
$request->session()->regenerateToken(); // regenerate token
return $response; // send response
请分享结果