4

我在我的项目中使用 FOSUserBundle 和 FOSFacebookBundle(适用于版本 SF 2.0.x)。此外,我按照 FOSFacebookBundle 文档中的描述实现和自定义 FacebookProvider。我想实现以下工作流程:1.)用户第一次访问我的门户 2.)他点击 Facebook-Login-Button 3.)现在我需要检查,如果这个用户点击了 Facebook-Login -Button 在我的门户网站上已经有 Facebook-Friends。4.) 如果他有朋友,将他重定向到一个注册页面(包括来自 Facebook 的信息,如用户名、名字、姓氏等),并带有预填充的输入字段。5.) 如果他在我的门户网站上没有 Facebook 好友,将他重定向到另一个页面

我已经开始查看 Webprofiler,它调用了哪些事件。我已经开始创建自己的事件侦听器,如本页所述:http: //www.dobervich.com/2011/10/13/login-redirection-revisited/ 但配置文件在“不”列表中显示我的侦听器称为侦听器”:security.interactive_login SecurityListener::onSecurityInteractiveLogin

有谁知道,我如何自定义此登录前检查并将用户重定向到页面?

在这方面获得一些帮助会很棒。

谢谢你,拉莫

4

1 回答 1

5

您需要配置自定义身份验证成功处理程序。配置一个实现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));
}
于 2012-01-02T15:43:07.690 回答