我想使用CodeIgniter创建一个简单的Facebook网络应用程序,以便能够发布到链接到我的Facebook帐户的页面。
目前这是我的代码:
控制器:
function facebook(){
$this->config->load('facebook', TRUE);
$this->load->library('facebook');
$login_url = $this->facebook->get_user();
echo $login_url;
}
库:
我确实使用粘贴在这里的代码:http://www.benmarshall.me/facebook-sdk-php-v4-codeigniter/(Ben Marshall)。
默认情况下,库代码不会打印相应的Exception。所以我不得不扩展代码,使它看起来像这样(在构造函数上):
public function __construct() {
$this->ci =& get_instance();
$this->ci->load->library('session');
if (!isset($_SESSION)){
session_start();
}
FacebookSession::setDefaultApplication(
$this->ci->config->item('api_id', 'facebook'),
$this->ci->config->item('app_secret', 'facebook')
);
$this->helper = new FacebookRedirectLoginHelper($this->ci->config->item('redirect_url', 'facebook'));
if($this->ci->session->userdata('fb_token')){
$this->session = new FacebookSession( $this->ci->session->userdata('fb_token'));
// Validate the access_token to make sure it's still valid
try {
if (!$this->session->validate()){
$this->session = false;
}
}catch(Exception $e){
// Catch any exceptions
$this->session = false;
}
}else{
try {
$this->session = $this->helper->getSessionFromRedirect();
}catch(FacebookRequestException $ex){
echo "<pre> "; print_r($ex->getCode());
// When Facebook returns an error
}catch(Exception $ex){
echo "<pre>"; print_r($ex);
// When validation fails or other local issues
}
}
if ($this->session ){
$this->ci->session->set_userdata( 'fb_token', $this->session->getToken() );
$this->session = new FacebookSession( $this->session->getToken());
}
}
我做的是: 1.我手动启动会话,否则我会收到错误说&#34;会话未激活,无法加载状态。&#34;使用错误代码:721。
但是,即使我开始会话,FacebookRedirectLoginHelper也总是返回NULL。
在我深入挖掘之后,事实证明在FacebookRedirectLoginHelper.php中,特别是loadState()函数总是返回NULL。
这是loadState()
的代码protected function loadState()
{
if ($this->checkForSessionStatus === true
&& session_status() !== PHP_SESSION_ACTIVE) {
throw new FacebookSDKException(
'Session not active, could not load state.', 721
);
}
if (isset($_SESSION[$this->sessionPrefix . 'state'])) {
$this->state = $_SESSION[$this->sessionPrefix . 'state'];
return $this->state;
}
return null;
}
有人可以为我建议一个可能的解决方案吗?有没有人用CI成功开发FB API 4?
答案 0 :(得分:0)
你需要写session_start();在页面的开头,将在php页面上启动会话。
如果你可以从autoload.php配置文件中自动加载facebook库,那就很好了。
答案 1 :(得分:0)
class MyFacebookRedirectLoginHelper extends \Facebook\FacebookRedirectLoginHelper {
public function __construct() {
$this->ci = & get_instance();
}
protected function storeState($state) {
if ($this->ci->session->set_userdata($this->sessionPrefix . 'state', $state)) {
$this->state = $this->ci->session->set_userdata($this->sessionPrefix . 'state', $state);
return $this->state;
}
return NULL;
}
protected function loadState() {
return $this->state = $this->ci->session->userdata($this->sessionPrefix . 'state');
}
}
https://github.com/facebook/facebook-php-sdk-v4/issues/39#issuecomment-42363729