1

在我的 symfony2 项目中,我使用的是 FOSFacebookBundle,它工作正常。如果 fb 用户已经存在于用户登录的 DB 上,另一方面如果用户尚未注册,则用户将被添加到 DB,并从 FB 中检索数据。

到目前为止一切顺利,但是如果用户在此过程中注册,现在我想将用户重定向到个人资料编辑页面,否则将重定向到主页。我该如何实施?我只知道提供者中是否存在用户,我是否应该在提供者中向会话注册一些信息,然后创建一些侦听器来读取会话并进行重定向?

欢迎任何提示:)

4

2 回答 2

1

您需要配置自定义身份验证成功处理程序和身份验证失败处理程序。配置一个实现AuthenticationSuccessHandlerInterface : 和AuthenticationFailureHandlerInterface的服务

facebook_auth_success_handler:
         class: MyHandler
         public: false
         arguments:
             # your dependencies...

然后将此处理程序添加到您的 fos_facebook 块下的 security.yml 中:

firewalls:
foo:
    fos_facebook:
        success_handler: facebook_auth_success_handler
于 2013-05-27T22:55:33.583 回答
0

当您使用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

于 2013-05-27T22:55:37.457 回答