Перенаправление пользователей после входа в систему с помощью Remember_me на разные маршруты в зависимости от их РОЛЬ в Symfony 4. - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь перенаправить своих пользователей на разные маршруты в зависимости от их ролей при входе в систему. Он отлично работает в моей LoginFormAuthenticator (onAuthenticationSuccess функция), но не один раз, когда используется используется remember_me.

LoginFormAuthenticator. php

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    $roles = $token->getRoleNames();
    if (in_array('ROLE_ADMIN', $roles, true)) {
        return new RedirectResponse($this->urlGenerator->generate('admin'));
    }

    if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
        return new RedirectResponse($targetPath);
    }

    return new RedirectResponse($this->urlGenerator->generate('homepage'));
}

security.yaml

remember_me:
    secret: '%kernel.secret%'
    lifetime: 604800  # 1 week in seconds

Мне удается увидеть, что функция authenticate RememberMeListener вызывается при каждом запросе, но он проверяет первую строку функции для текущего токена безопасности и, если он есть у запроса, он просто завершает функцию с return;. В моем случае, когда я пытаюсь получить доступ к приложению через remember_me, появляется токен. Поэтому я думаю, что именно поэтому я могу использовать событие security.interactive_login, которое отправляется несколькими строками ниже в этом слушателе.

RememberMeListener. php

public function authenticate(RequestEvent $event)
{
    if (null !== $this->tokenStorage->getToken()) {
        return;
    }

    (...)

    try {
        (...)

        if (null !== $this->dispatcher) {
            $loginEvent = new InteractiveLoginEvent($request, $token);
            $this->dispatcher->dispatch($loginEvent, SecurityEvents::INTERACTIVE_LOGIN);
        }

        (...)
    }
}

Трудно найти какое-либо другое мероприятие, которое я мог бы использовать, поэтому, если у кого-то есть подсказка, я был бы рад попробовать что-то еще!

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