Symfony 2在用户接受条款之前不会创建任何cookie



我正在尝试实现一种方法来阻止Symfony 2创建cookie。 当用户登录到客户端站点时,将出现一个弹出窗口,允许用户接受 cookie 策略。 只有在接受此内容后,才能创建 Cookie。 在发生这种情况之前,我如何停止symfony创建cookie?

我认为最好的方法是在登录时检查用户。

一种选择是kernel.event_listener

应该是这样的

use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;
use SymfonyComponentHttpKernelEventGetResponseEvent;
/**
* This listener ensure that logged user must accept latest terms of service
*
* @author po_taka
*/
class TermsForceListener
{
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
$user = $this->tokenStorage->getToken()->getUser();
if (!$user instanceof YOUR_CLASS_HERE) {
return;
}
if ($user->getTermsAccepted()) {
// terms are accepted, continue with the page loading
return;
}
if (YOUR_VALIDATION_IF_CURRENT_PAGE_IS_TERMS_ACEEPTING_PAGE) {
$response = new SymfonyComponentHttpFoundationRedirectResponse(TERMS_ACCEPTING_PAGE, 302);
$event->setResponse($response);
$event->stopPropagation();
}
}
}

您可以使用以下 yaml 注册它

YOUR_SEVICE_NAME_HERE:
class: TermsForceListener
arguments: ['@security.token_storage']
tags:
- { name: kernel.event_listener, event: kernel.request }

你可以在这里阅读更多关于symfony事件的信息 - https://symfony.com/doc/current/reference/events.html

最新更新