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

Другие вопросы по тегам