2

我試圖從Facebook使用PHP SDK 3.2.2檢索訪問令牌,下面的代碼是我在Facebook中的成功用戶登錄後放置在重定向URL中的代碼。我的問題是,在用戶授予APP訪問權限後,用戶訪問令牌不會返回用戶訪問令牌,而只是一種形式爲'AppId | AppSecret'的字符串,我必須包括手動獲取用戶訪問令牌的代碼。這項工作,但我不知道爲什麼當我使用getAccessToken不回饋正確的令牌。我還想知道如果有更好的方法來檢索用戶訪問令牌比用$ code,因爲我不覺得這是一個很好的方法。從Facebook獲取訪問令牌PHP SDK無法正常工作

注意:我使用$ this-> facebook,因爲我將它作爲Codeigniter庫加載。

$access_token = $this->facebook->getAccessToken(); 

    //------------------------------------------------------------------------- 
    //echo '<br/>Access Token: ' . $access_token; 
    // Generare Token if not created: 
    $code = $_REQUEST["code"]; 

    if (isset($code)) { 
    //echo '<br/>Code Enviado: ' . $code; 
    //exit(); 
    $appId  = $this->facebook->getAppId(); 
    $appSecret = $this->facebook->getAppSecret(); 

    $redirectTo = base_url('asociar/acc_facebook/step2/'); 

    $token_url="https://graph.facebook.com/oauth/access_token?client_id=" 
     . $appId . "&redirect_uri=" . urlencode($redirectTo) 
     . "&client_secret=" . $appSecret 
     . "&code=" . $code . "&display=popup"; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 

    //echo '<br/>Repitiendo el Token'; 

    $this->facebook->setAccessToken($access_token); 
    //echo '<br/>Second Access Token Fijado: ' . $access_token; 
    } 
    //----------------------------------------------------------------------- 

UPDATE:

這個問題是由於我使用的CI與PHP SDK(檢查我自己的這個答案),但得到的答覆是有效的(任何人都具有與Facebook PHP SDK這個問題,檢查@Imbru回答)

回答

0

這個迴應有點遲,但可能會對其他用戶有所幫助。

今天我有同樣的問題。

我的access_token未正確存儲在$ _SESSION中。顯然,客戶端發送access_token一次。您必須將其存儲在內存中(SESSION)並重新使用它。

在正常時間,Facebook的PHP SDK做...

編輯:見更多的解釋

+1

嗨!我已經將你的答案標記爲已接受,因爲儘管我沒有檢查過,但我確定你是對的。 Codeigniter不使用PHP NATIVE SESSIONS,它發送cookie中的所有數據,因此,當Facebook SDK嘗試在SESSION中保存令牌的值時,它不能。 – Chococroc 2014-06-15 08:12:06

2

@Imbru指出我的解決方案@Chococroc響應,如果有信用,給他。

考慮到這一點:當使用Codeigniter時,它會將所有會話數據保存在cookie中併發送給瀏覽器,而不是將其存儲在服務器中。是的,他們這樣做,並導致許多其他問題(如存儲大量數據時丟失會話,而瀏覽器僅將它們中的一部分發回給您,但這是另一個歷史記錄)。

對於CI,解決方案是用另一個用PHP $ _SESSION管理會話的會話類,例如https://bitbucket.org/xperez/core-session-storage-for-codeigniter(我在項目中使用它,像魅力一樣工作)來覆蓋會話核心類。通過這種方式,當使用PHP-sdk時,您將會保存會話中的值,並且當Facebook類將嘗試恢復它們時,它將能夠執行此操作。

當然,如果您在使用Facebook PHP SDK時遇到問題,請檢查$ _SESSION是否存儲了您想要的值,因爲問題是當您想要檢索時,服務器中沒有該值它會導致您出現無法驗證的錯誤。

相關問題