2012-10-24 52 views
0

我正在構建一個使用php facebook庫的網站。在每一頁的開頭,我檢查用戶是否使用$ facebook-> getLoginStatusUrl($ params)函數登錄Facebook或不使用(或嘗試使用)。我遇到的問題是,檢查該功能的唯一方法是讓用戶根據自己的雕像重定向到一個頁面(將它們引導至由該功能返回的url)。我不能使用file_get_contents或cURL,因爲該函數返回的URL使用https。無論如何,我可以通過服務器端方法獲取該URL的內容嗎?或者是絕對唯一的方式來做到這一點與重定向?我更願意不要將此作爲客戶端操作(通過Javascript)。有任何想法嗎?獲取用戶Facebook登錄狀態,但不想重定向

回答

0

您可以使用facebook的getUser()函數來檢查用戶是否已登錄並向您的網站提供了許可。之後,你可以使用getLoginUrl()或getLogoutUrl()向用戶顯示右鍵:

$user = $facebook->getUser();  

if (!$user) 
{ 
    $loginUrl = $facebook->getLoginUrl(array(
    'redirect_uri' => REDIRECT_URL, 
    'scope' => APP_PERMS, 
    'display' => 'page' 
)); 

    //do something with $loginUrl, for example: 
    echo '<a href="'.$loginUrl.'">Login with facebook</a>'; 
} 
else 
{ 
    //check that this user is still valid 
    $realUser = $facebook->api('me'); 

... 

您可以瞭解更多關於此功能在Facebook的文檔:

https://developers.facebook.com/docs/reference/php/

+0

我試過這個,如果它對我有效,它會使用它。出於某種原因,即使我從Facebook註銷,$ facebook-> getUser()仍然會返回我的Facebook ID,使其無法測試我是否已登錄 – labago

+0

這是事實,這是因爲Facebook庫首先檢查餅乾,如果有延遲,直到這個餅乾變老。它慢得多,但是你可以檢查用戶是否連接了一個需要訪問令牌的api調用:例如,你可以調用$ facebook-> api('/ me'),除此之外,還可以給你更多關於用戶的信息。 –

+0

我已經更新了我的帖子,你可以在getUser返回一個id之後檢查真實的用戶,這樣頁面會更快地響應沒有登錄的用戶。 –

0

我並不是很熟悉Facebook的PHP庫,所以無法分辨是否有更好的方法來做你正在嘗試做的事情,但file_get_contents和cURL都可以在HTTPS下正常工作,只需給予他們的完整URL(例如「https://google.com/」)

+0

它通過爲該facebook功能提供一組返回的URL轉發(基於用戶的登錄狀態)的URL。所以我給了它一個www.mywebsite.com/status.php的位置,然後給了那個url = false或者status = true的url參數。所有這些都會在被命中時出現真實或錯誤的迴應,並且打算用cURL來使用它,這樣我就可以知道用戶是否已登錄。但是,這隻有在瀏覽器中的facebook功能訪問我的URL時纔有效。如果我用cURL去它,我會得到一個空白頁面 – labago

0

是無論如何,我可以通過服務器端方法獲取該URL的內容?

這不會幫助你,因爲它不是你的服務器,客戶端用於登錄到Facebook,但他的瀏覽器。

因此,檢查用戶是否登錄必須在他們的瀏覽器中進行 - 這就是瀏覽器重定向到Facebook的原因,因爲這是讀取在Facebook域中設置的Cookie的唯一方法。

我更不希望將其作爲客戶端操作(通過Javascript)。

由於重定向,它已經是一種客戶端操作。

如果用戶在瀏覽器中登錄Facebook,絕對沒有辦法讓您的服務器單獨弄清楚。