Facebook PHP SDK - 注销问题

时间:2012-02-23 20:44:16

标签: php facebook codeigniter

我正在使用FB PHP SDK以及Code Igniter 2 Framework。

我有一个注册页面,我可以在其中显示一个链接,供用户点击并批准该应用,并授予其访问基本数据和电子邮件的权限。这似乎工作正常(虽然我已将其设置为弹出窗口,但它不会弹出,只显示在同一页面中!)。

我的问题是,在使用FB登录后,该页面会显示一个注销链接,在点击时,应将其注销(因此再次显示登录链接)但是它不起作用。

我有一个参数设置将页面带到某个页面,这确实有效。只是出于某种原因,FB“会话”仍然存在,用户仍然使用FB登录。

有什么想法吗?

我的控制器中的代码:

// Facebook Connect
    $fb_config = array(
        'appId'  => 'xxx',
        'secret' => 'xxx'   
    );

    $this->load->library('facebook', $fb_config);

    $user = $this->facebook->getUser();

    if ($user) {
        try {
            $data['user_profile'] = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            $user = null;
        }
    }

    if ($user) {
        $params = array('next' => 'http://localhost/game/index.php/game/login');
        $data['logout_url'] = $this->facebook->getLogoutUrl($params);
    } else {
        $params = array('scope' => 'email, publish_stream, publish_actions', 'display' => 'popup');
        $data['login_url'] = $this->facebook->getLoginUrl($params);
    }

最后一个小问题 - 我应该使用PHP SDK,还是应该使用Javascript SDK?我无法找到哪一个最适合任何工作的信息?! Confused.com

3 个答案:

答案 0 :(得分:3)

  

我应该使用PHP SDK,还是应该使用Javascript SDK?

如果您的应用可以使用JavaScript SDK而不是PHP SDK创建,那么请继续使用。保存服务器的CPU周期以获取其他信息。它还允许您异步执行登录,这可能很好。

复杂的应用程序通常同时使用JavaScript SDK和PHP SDK - 在这种情况下,登录通常在Javascript端处理(PHP SDK会自动知道用户是否通过JavaScript登录)。

答案 1 :(得分:1)

  

我的问题是,在用FB登录后,页面会显示一个   注销链接,单击时,应将其注销(因此显示   再次登录链接)但它不起作用。

这个原因由您的网站无法清除fb会话。我在cakephp框架中使用facebook api时遇到同样的问题。并且...当用户退出时我尝试清除会话(我不喜欢它) 我调试并看到,当facebook帐户登录成功时,$this->facebook->user()不为null并且不会抛出任何异常。

答案 2 :(得分:0)

您需要在注销链接中添加一个活动的用户访问令牌才能使用注销链接。

请参阅:https://developers.facebook.com/docs/reference/php/facebook-getLogoutUrl/

示例:

if ($user) {
  $params = array (
  access_token => ''.$access_token.'',
  );
  $logoutUrl = $facebook->getLogoutUrl($params);
} else {
$params = array(
  scope => 'read_stream,publish_stream,publish_actions,read_friendlists',
  //redirect_uri => $url
  );
  $loginUrl = $facebook->getLoginUrl($params);
};