【问题标题】:how to stop facebook sdk from returning uid in $facebook->getUser()如何阻止 facebook sdk 在 $facebook->getUser() 中返回 uid
【发布时间】:2011-12-18 07:32:29
【问题描述】:

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

问题是使用 facebook 注销按钮将用户从 Facebook 网站而不是我的网站注销

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

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

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

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

【问题讨论】:

    标签: php facebook facebook-graph-api authentication


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      facebook 如何知道用户已在您的网站上登出? 向本地数据库放置一个标志,表明该用户已注销。在 $facebook->getUser() 之后检查它。

      【讨论】:

        猜你喜欢
        • 2013-10-03
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        • 2011-09-22
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多