Symfony 2 не создает куки, пока пользователь не примет условия - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь реализовать способ остановить создание Symfony 2 cookie. Когда пользователь входит на сайт клиентов, появляется всплывающее окно, которое позволяет пользователю принять политику использования файлов cookie. Только после того, как это было принято, должны быть созданы куки. Как мне остановить создание файлов cookie в Symfony, пока это не произойдет?

1 Ответ

0 голосов
/ 01 мая 2018

Я думаю, что лучший способ - это проверить пользователя при входе в систему.

Один из вариантов: kernel.event_listener

Это должно быть что-то вроде этого

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

/**
 * 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 \Symfony\Component\HttpFoundation\RedirectResponse(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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...