2013-01-06 104 views
0

所以我正在使用Facebook登錄和保密建立一個應用程序。一切都很好,很正常,用下面的代碼(按照DOC)通過Facebook應用程序知道用戶是否已登錄的方法。

require 'facebook-php-sdk/src/facebook.php'; 

$facebook = new Facebook(array(
    'appId' => 'YOUR_APP_ID', 
    'secret' => 'YOUR_APP_SECRET', 
)); 

// Get User ID 
$user = $facebook->getUser(); 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 

我的問題是我怎麼告訴如果用戶登錄時沒有做上述所有一遍別處。例如,在我看來,如何能夠快速測試用戶是否登錄? 如果是這樣,我只需撥打電話Facebook::getUser()它不適用於我的Codeigniter應用程序。在我看來,我嘗試了下面的代碼。

$user = Facebook::getUser(); 

,並得到了錯誤:

A PHP Error was encountered 

Severity: Notice 

Message: Undefined property: CI_Loader::$user 

Filename: src/base_facebook.php 

Line Number: 504 


Fatal error: Call to undefined method CI_Loader::getUserFromAvailableData() in /home/syklone911/webapps/meme/application/libraries/facebook/src/base_facebook.php on line 509 

有人可以提供一些線索這光?

回答

1

創建內部的application/config文件夾一個新的文件,並將其命名爲facebook.php與內容:

if (! defined('BASEPATH')) exit('No direct script access allowed'); 
$config['appId'] = 'your_app_id'; 
$config['secret'] = 'your_app_secret'; 

應用程序創建一個文件夾/庫並將其命名爲facebook帶內容(facebook php SDK文件):

  • base_facebook.php
  • Facebook.php :(重命名facebook.php到Facebook.php並在第一行添加:

    如果(! ('BASEPATH'))exit('不允許直接訪問腳本');

  • fb_ca_chain_bundle.crt

當您在您的任何控制器要加載庫,你只需要做:

$config = $this->load->config('facebook', TRUE); 
$this->load->library('facebook/facebook', $config); 

在你看來,測試,如果用戶是是否登錄:

$user = $this->facebook->getUser(); 
if($user){ 
    try{ 
     $user_profile = $this->facebook->api('/me'); 
     $access_token = $this->facebook->getAccessToken(); 
    }catch (FacebookApiException $e) { 
     $user = null; 
    } 
} 
if($user){ 
    //User is logged in via Facebook 
}else{ 
    //User is not logged. Prompt the user to log in via Facebook 
    echo '<a href="'.$this->facebook->getLoginUrl().'">Login Via Facebook</a>'; 
} 

那s所有。

0

那麼你需要需要Facebook的數據存儲在某種形式的會話變量,所以你可以在應用程序

,更好清潔的編碼習慣使用所有你可能有中間控制器MY_Controller與會話檢查,如果用戶登錄或不併設置超級對象在中間控制器

0

在每一頁的開始後if($user)地方 if(session_id()){} else { session_start() ; },您必須使用此if(session_id()){} else { session_start() ; },無論數據要在所有的頁面中使用,你應該存儲在會話像這樣變量:$_SESSION['VARIABLE_NAME'] ='DATA TO STORE'這將保持該數據活着你所有的網頁。 注意:您必須在要使用GRAPH API的每個頁面上啓動Facebook類。 即 require 'facebook-php-sdk/src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', ));

相關問題