0

我有这个 facebook 应用程序可以在我的网站上显示 fb 通知。然后我遇到了这个问题,假设有两个用户 Alice 和 Bob。Alice 是我网站的常客,她向 Bob 推荐了它。她让他从她自己的笔记本电脑上注册到我的网站。当 bob 尝试添加应用程序时,Alice 的 fb 通知出现了。实际上,当 Bob 单击登录链接时,由于 alice 已经登录到 facebook,它只是提取了她的详细信息(同一会话),如何解决这种情况,我们是否必须让 Alice 从 facebook 注销并让 Bob 登录,类似于“Alice 已经登录,以其他用户身份登录”,有人可以提出一些解决方案以及如何做到这一点。

以下是我用于登录的一段代码

        require_once('sdk/src/facebook.php');

        $facebook = new Facebook(array(
          'appId'  => 'xxxxxxxxxxxxxxxx',
          'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
          'cookie' => true
        ));


        // Get User ID
        $user = $facebook->getUser();


        // Login or logout url will be needed depending on current user state.
        if ($user) {
          $logoutUrl = $facebook->getLogoutUrl();
        } else {
          $loginUrl = $facebook->getLoginUrl();
        }


        //check permissions list

        if ($user) {
            $permissions_list = $facebook->api('/me/permissions','GET', array('access_token' => $access_token));


             //check if the permissions we need have been allowed by the user
            //if not then redirect them again to facebook's permissions page
            //
            $permissions_needed = array('manage_notifications','publish_stream', 'read_stream');
            $login_url_params = array(
                        'scope' => 'manage_notifications,publish_stream,read_stream',
                        'fbconnect' =>  1,
                        'display'   =>  "page",
                        'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
                    );
            foreach($permissions_needed as $perm) {
                if( !isset($permissions_list['data'][0][$perm]) || $permissions_list['data'][0][$perm] != 1 ) {
                    $login_url_params = array(
                        'scope' => 'manage_notifications,publish_stream,read_stream',
                        'fbconnect' =>  1,
                        'display'   =>  "page",
                        'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
                    );
                    $login_url = $facebook->getLoginUrl($login_url_params);
                    echo $login_url;
                    header("Location: {$login_url}");
                    exit();
                }
            }               

            //if the user has allowed all the permissions we need,
            //get the information about the pages that he or she managers
            $accounts = $facebook->api(
                '/me',
                'GET',
                array(
                    'access_token' => $access_token
                )
            );              
        } 

          else {
            //if not, let's redirect to the ALLOW page so we can get access
            //Create a login URL using the Facebook library's getLoginUrl() method
            $login_url_params = array(
                'scope' => 'manage_notifications,publish_stream,read_stream',
                'fbconnect' =>  1,
                'display'   =>  "page",
                'next' => 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
            );
            $login_url = $facebook->getLoginUrl($login_url_params);

            //redirect to the login URL on facebook
            $facebook_login = $login_url;
             echo "<a href='$login_url'>Login Facebook</a>";
4

2 回答 2

3

最好的办法是:

  1. 当用户访问您的站点时,使用 Javascript SDK 和FB.getLoginStatus方法检测他们是否已登录 Facebook 以及是否为您的应用程序进行了身份验证。
  2. 如果他们未经过身份验证,请使用“权限”对话框提示他们并鼓励他们注册。
  3. 如果他们经过身份验证并登录到 FB,则自动将它们登录到您的网站。为避免 Alice/Bob 混淆,请在您网站的某处显示他们已以“Alice”身份登录的指示符,并且可能在下方有一个链接显示“不是你?单击此处以其他人或类似身份登录
  4. 如果他们单击此链接,或者单击您网站上的注销链接,请调用 Javascript SDK 中的FB.logout方法,这将使该用户的当前访问令牌无效,但也会将他们从 Facebook 中注销。

然后,您可以在此之后将他们推送回登录/注册页面,他们将被提示登录他们的Facebook 帐户。

于 2012-07-25T21:20:14.350 回答
2

据我所知,新用户必须先让前一个用户退出 Facebook,然后再让他或她自己登录

我们无法控制登录/身份验证弹出窗口,也无法控制本地存储的 Facebook 会话数据,因此当 Bob 点击登录并看到以 Alice 身份登录(不是你?)时,他应该点击“不是你吗? ” ',这将使 Alice 退出 Facebook 并提示 Bob 登录然后授权。这是有问题的,因为当 Bob 离开并且 Alice 访问 Facebook.com 时,她将登录到 Bob 的帐户。

一种可能的解决方案是获取当前登录用户的姓名和个人资料图片,并将其显示在“使用 Facebook 登录”按钮旁边。这可能有助于向用户澄清事情。您应该能够在未经身份验证的情况下显示此信息,甚至可以提供您自己的链接以退出 Facebook。

于 2012-07-25T21:21:05.300 回答