Я пытаюсь перенаправить своих пользователей на разные маршруты в зависимости от их ролей при входе в систему. Он отлично работает в моей 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);
}
(...)
}
}
Трудно найти какое-либо другое мероприятие, которое я мог бы использовать, поэтому, если у кого-то есть подсказка, я был бы рад попробовать что-то еще!