Symfony 2 FOSFacebookBundle настраиваемое перенаправление перед входом в систему - PullRequest
4 голосов
/ 01 января 2012

Я использую FOSUserBundle и FOSFacebookBundle (для версии SF 2.0.x) в моем проекте. Кроме того, я реализовал и настроил FacebookProvider, как описано в документации FOSFacebookBundle. Я хотел бы добиться следующего рабочего процесса: 1.) Пользователь заходит на мой портал в первый раз 2.) Он нажимает кнопку входа в Facebook 3.) Теперь мне нужно проверить, есть ли у этого пользователя, который нажал кнопку входа в Facebook, друзья на Facebook. 4.) Если у него есть друзья, перенаправьте его на страницу регистрации (включая информацию из Facebook, например, имя пользователя, имя, фамилия и т. Д.) С предварительно заполненными полями ввода. 5.) Если на моем портале нет друзей в Facebook, перенаправьте его на другую страницу

Я начал смотреть на Webprofiler, какие события вызываются. Я начал создавать свой собственный прослушиватель событий, как описано на этой странице: http://www.dobervich.com/2011/10/13/login-redirection-revisited/, но профиль показывает мне моего слушателя в списке «не вызванных слушателей»: security.interactive_login SecurityListener :: onSecurityInteractiveLogin

Кто-нибудь знает, как я могу настроить эту предварительную проверку входа и перенаправить пользователя на страницу?

Было бы здорово получить помощь по этому вопросу.

Спасибо, Рамо

1 Ответ

5 голосов
/ 02 января 2012

Вам необходимо настроить собственный обработчик успешной аутентификации.Настройте службу, которая реализует AuthenticationSuccessHandlerInterface :

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

Сам обработчик долженвыглядеть примерно так:

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
    $user = $token->getUser();
    $hasFriendsHereAlready = // your logic here
    if ($hasFriendsHereAlready) {
        $route = 'foo';
    } else {
        $route = 'bar';
    }
    return new RedirectResponse($this->router->generate($route));
}
...