FOSFacebookBundle редирект после регистрации
В моем проекте symfony2 я использую FOSFacebookBundle, и он работает нормально. Если пользователь fb уже существует в БД, пользователь вошел в систему, с другой стороны, если пользователь еще не зарегистрирован, пользователь будет добавлен в БД, а данные получены из FB.
Пока все хорошо, но теперь я хочу перенаправить пользователя на страницу редактирования профиля, если пользователь был зарегистрирован в этом процессе, иначе будет перенаправлен на домашнюю страницу. Как я могу это реализовать? Я просто знаю, существует ли пользователь в поставщике, должен ли я зарегистрировать некоторую информацию для сеанса в поставщике, а затем создать прослушиватель для чтения сеанса и выполнения перенаправления?
Любые намеки приветствуются:)
2 ответа
Вам необходимо настроить пользовательский обработчик успеха аутентификации и обработчик ошибок аутентификации. Настройте службу, которая реализует AuthenticationSuccessHandlerInterface: и AuthenticationFailureHandlerInterface
facebook_auth_success_handler:
class: MyHandler
public: false
arguments:
# your dependencies...
Затем добавьте этот обработчик в security.yml под вашим блоком fos_facebook:
firewalls:
foo:
fos_facebook:
success_handler: facebook_auth_success_handler
Как вы используете FOSUserBundle
(согласно тегам на ваш вопрос), вы можете подключиться к контроллерам и перенаправить на событие REGISTRATION_SUCCESS
(когда пользователь создан).
В вашем случае это должно выглядеть следующим образом:
// src/Acme/UserBundle/EventListener/RegistrationSuccessListener.php
class RegistrationSuccessListener implements EventSubscriberInterface
{
private $router;
public function __construct(UrlGeneratorInterface $router)
{
$this->router = $router;
}
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess'
);
}
public function onRegistrationSuccess(GetResponseUserEvent $event)
{
$url = $this->router->generate('profile_edit_page');
$event->setResponse(new RedirectResponse($url));
}
}
И ваш service.yml
:
services:
acme_user.registration.success:
class: Acme\UserBundle\EventListener\RegistrationSuccessListener
arguments: [@router]
tags:
- { name: kernel.event_subscriber }
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md