如何阻止facebook sdk在$ facebook-> getUser()中返回uid

时间:2011-12-18 07:32:30

标签: php facebook facebook-graph-api authentication

所以我正在尝试为我的网站编写Facebook注销功能

事情是使用Facebook注销按钮将改为从Facebook网站注销用户而不是从我的网站

所以我当前的逻辑是当点击退出按钮时,它会调用我的应用程序的注销功能,会话被清除等等

但是我还有其他地方的逻辑,如果$ facebook-> getUser()正确返回uid,从数据库中获取用户信息并将其设置为已登录

有没有办法阻止$ facebook-> getUser()返回正确的用户ID?

IE当用户点击退出时,他不应该退出实际的facebook网站,而且$ facebook-> getUser()也应该没有返回正确的id,这样他就不会自动重新登录再次

1 个答案:

答案 0 :(得分:0)

使用Facebook SDK时要记住的是,当您进行身份验证时,您实际上是登录Facebook&你的网站是单独的 - 你需要迎合这个逻辑。

登录Facebook后,会创建一个身份验证cookie(而不是会话)。您可能正在使用会话进行站点身份验证,但Facebook正在使用Cookie。

如果您不希望在后续调用中返回UID,则需要调用 $ facebook-> destroySession();

看看我的CodeIgniter代码,* index.php / authenticate / kill_session *方法调用上面的 destroySession(); 方法以及清除我的应用程序会话 - 这完全导致我退出Facebook和我的应用程序:

<?php
class Facebook_model extends CI_Model 
{ 
public function __construct()
{
    parent::__construct();

    $this->config->load('facebook');

    $config = array(
       'appId'      => $this->config->item('facebook_api_key'),
       'secret'     => $this->config->item('facebook_secret_key'),
       'fileUpload' => false,
    );

    $this->load->library('Facebook', $config);
}

public function connect()
{
    $user = $this->facebook->getUser();

    $profile = null;

    if($user)
    {
        try {
          $profile = $this->facebook->api('/me');
        } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
        }
    }

    $fb_data = array(
       'me'        => $profile,
       'gender'    => $profile['gender'],
       'uid'       => $user,
       'loginUrl'  => $this->facebook->getLoginUrl(array('scope' => 'email,user_birthday')),
       'logoutUrl' => $this->facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))),
    );

    return $fb_data;
}

public function disconnect()
{
    $this->facebook->destroySession();
}

 } // EOC