2016-02-07 28 views
1

我工作的這個Facebook的例子:Getting Access Token From The JavaScript SDK Example來自Facebook的JS SDK傳遞訪問令牌PHP會話或餅乾

我能夠獲得與JS恰到好處Facebook登錄部分。 但我想從PHP的用戶ID和訪問令牌服務器端的操作,如添加,刪除等

這是我的JS部分的正常工作:

function fb_login() { 
    FB.login(function(response) { 
     if (response.authResponse) { 
      $.post("actions.php?js-login").done(function(data){ 
       console.log(data); 
      });   
      init_app(); 
     } else { 
     alert('User cancelled login or did not fully authorize.'); 
     } 
    }); 
    } 

這是PHP一側似乎無法識別cookie或會話的JS應該轉移:

if (isset($_GET['js-login'])) { 

$helper = $fb->getJavaScriptHelper(); 

try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 

if (! isset($accessToken)) { 
    echo 'No cookie set or no OAuth data could be obtained from cookie.'; 
    exit; 
} 

// Logged in 
echo '<h3>Access Token</h3>'; 
var_dump($accessToken->getValue()); 

$_SESSION['fb_access_token'] = (string) $accessToken; 
exit; 

} 

我得到的

無法從cookie中獲取cookie或無OAuth數據。

消息,但用戶由JS登錄。

+3

您發現了嗎?在這裏得到了同樣的問題... JS部分工作正常(FB登錄工程),但似乎沒有設置cookie。 – gordie

+0

不得不與JS植入cookie ...它的工作原理,但它不漂亮。 –

+0

根據[此頁](https://www.sammyk.me/best-practice-for-facebook-login-with-the-javascript-sdk-and-php-sdk-v4-1),創建的Cookie名字是** fbsr _ {_ your-app-id _} **。我剛剛檢查過,沒有爲我創建cookie。 – gordie

回答

1

你需要確保與

{cookie: true} 

選項設置爲初始化JavaScript的SDK。例如:

window.fbAsyncInit = function() { 
    FB.init({ 
    appId: 'your-app-id', 
    cookie: true, // This is important, it's not enabled by default 
    version: 'v2.2' 
    }); 
}; 

如果不設置此選項,Facebook的cookie將不會被設置和PHP SDK將無法從存在cookie中的簽名的請求獲得訪問令牌。

參考:https://developers.facebook.com/docs/php/howto/example_access_token_from_javascript