1

我在 Codeigniter 2.1 项目中的 Facebook 连接 API 中遇到了一个非常奇怪和奇怪的问题。我的网站具有社交登录功能,并且我在本地主机中测试的所有代码都运行良好。但是当我将我的项目上传到托管服务器时,Facebook 连接库总是返回空对象。

我正在使用 facebook-php-sdk 3.2,下面是我正在使用的代码。

在配置文件夹中,我有一个名为 facebook.php 的文件,其中包含

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
    'appId' => 'xxxxxxxxxxxxxxxxxxxxxx',
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx'

);
?>

我的库文件夹下有一个名为 Fbconnect.php 的库。包含代码

<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

include (APPPATH . 'libraries/facebook/facebook.php');

class Fbconnect extends Facebook {

    /**
     * Configured the facebook object
     */enter code here
    public $user = null;
    public $user_id = null;
    public $fb = false;
    public $fbSession = false;
    public $appkey = 0;

    public function __construct() {
        $ci = & get_instance();
        $ci->config->load('facebook', true);
        $config = $ci->config->item('facebook');
        parent::__construct($config);
        $this->user_id = $this->getUser();
        $me = null;
        if ($this->user_id) {
            try {
                $me = $this->api('/me');
                $this->user = $me;
            } catch (FacebookApiException $e) {
                error_log($e);
            }
        }
    }

}

?>

下面是我的控制器的代码

    public function fb_login()
    {
    $this->load->library('fbconnect');
    $user_data = array(
        'redirect_uri' => actionLink("signup", 'social', 'Facebook'),
        'scope' => 'email'
    );

    redirect($this->fbconnect->getLoginUrl($user_data));

    }

我创建了一个名为 actionLink 的辅助函数,这是它的代码

function actionLink($controller = '', $action = '', $param = '')
{
    $url = base_url();
    if (strlen($controller) > 0) {
        $url .= "$controller";
        if (strlen($action) > 0) {
            $url .= "/$action";
            if (strlen($param) > 0) {
                $url .= "/$param";
            }
        }
    }

return $url;

}

请帮忙。

4

1 回答 1

0

Signup.php 中替换行号。37 至 46 具有以下内容://inside function social($userType = 'Web')
1。尝试解决方案 1 只是为了确保它可以正常工作,但不是通用的,它特定于 Facebook。
2 . 解决方案 2 与您所做的相同,但采用 CI 方式:)


解决方案 1

$this->load->library('fbconnect');
$socialId = $this->fbconnect->getSocialId();
$this->data['social_id'] = $socialId;
$email = $this->fbconnect->getEmail();
$this->data['email'] = $email;
$name = $this->fbconnect->getName();
$this->data['name'] = $name;
$this->data['url'] = $userType;


解决方案 2

$className = $userType . "SocialService";
$this->load->library($className);
$socialId = $this->$className->getSocialId();
$this->data['social_id'] = $socialId;
$email = $this->$className->getEmail();
$this->data['email'] = $email;
$name = $this->$className->getName();
$this->data['name'] = $name;
$this->data['url'] = $userType;

实际上,您的主要问题出在FacebookSocialService.php中。您试图以不正确的方式在公共方法中调用私有方法。这就是您无法获取任何详细信息的原因。解决方案如下:
在您的公共方法中

public function getSomeData()
{
   $fbSocialService = new FacebookSocialService();
   $some_fb_data = $fbSocialService->getFacebook()->user['some_fb_data'];
   return $some_fb_data;
}
  • 但是,您可以将私有方法设为公开,而不是这样做。;)(开个玩笑,但它的修复速度很快):P
于 2013-04-26T15:23:38.707 回答