2012-10-09 71 views
0

我終於得到了我的Facebook登錄的工作,這樣我就可以從用戶Facebook登錄不成立

<?php 
    session_start(); 

    require_once 'facebook.php'; 

    $facebook = new Facebook(array(
     'appId' => '19582352346693', 
     'secret' => '44c21dde8d502ega23g287a751dea', 
     'cookie' => true, 
    )); 

    $user_id = $facebook->getUser(); 

?> 

<html xmlns:fb="http://www.facebook.com/2008/fbml"> 

<head> 

<title>Picture</title> 

</head> 

<body> 

<?php 

if($user_id) { 

    // We have a user ID, so probably a logged in user. 
    // If not, we'll get an exception, which we handle below. 
    try { 
    $test = null; 
    $user_profile = $facebook->api('/me','GET'); 
    //$test = $user_profile['id']; 
    echo "id: " . $user_profile['id']; 

    } catch(FacebookApiException $e) { 
    // If the user is logged out, you can have a 
    // user ID even though the access token is invalid. 
    // In this case, we'll get an exception, so we'll 
    // just ask the user to login again here. 
    $login_url = $facebook->getLoginUrl(); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 
    error_log($e->getType()); 
    error_log($e->getMessage()); 
    } 
} else { 

    // No user, print a link for the user to login 
    $login_url = $facebook->getLoginUrl(); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 

} 

?> 

</div> 

</body> 

</html> 

所有這些代碼檢索信息,會給我一個登錄,因爲我不是在登錄到APP(認證)。當我按下按鈕時,我可以看到我的信息,因爲我回應了它。

當我再按我的網頁上另一個按鈕。

<form action="<?php echo 'single_picture.php?argument=' . $picture_id ?>" method="post"> 
<input type="submit" name="submit" value="Vote!"> 
</form> 

我再次打開相同的頁面,但登錄按鈕只是再次表明了,忘了所有關於我在我登錄

我想到的if/else被檢查,如果我在我登錄。

我也試着打印出我的訪問令牌

$access_token = $facebook->getAccessToken(); 

然後我把它分爲:http://developers.facebook.com/tools/debug

這是說的訪問令牌的有效期爲一個小時

我在做什麼錯?

回答

1

您將需要將您從facebook獲得的訪問令牌存儲到某個地方。無論是會話,數據庫表還是簡單的文本文件。在neyt請求之前,您設置此令牌($facebook->setAccessToken($saved_access_token);),只要它仍然有效。

+0

嘿。謝謝你的答案。我一直在麻煩會議上班,但我會嘗試更多。許多用戶將同時使用該應用程序,所以我很難弄清楚如何使它與數據庫或txt一起工作。 – Pavenhimself

+1

由於令牌的有效性無論如何都是1小時,因此會話應適合存儲令牌。調用'session_start();'在任何其他代碼之前調用'$ _SESSION ['token'] = $ facebook-> getAccessToken();'賦值。在做出fb請求之前,請檢查'$ _SESSION ['token']'是否包含一個值;如果是,請設置此值,否則您可以直接重定向到登錄頁面。 –

+0

非常感謝!所有現在工作:) – Pavenhimself

0

那麼首先你的語法很混亂。 我想你忘了sesion_start

<?php session_start() ?> 

使用或檢查餅乾。

+0

嘿,謝謝。我已經擁有它了,但是謝謝你指出:) – Pavenhimself

+0

歡迎你,嘗試搜索setAccessToken – siniradam

0

我知道這不是你想要的,你給我你的問題,我給你一個不同的答案,但請把這個作爲一個建議。我在使用Facebook登錄時所做的工作是創建自己的登錄系統,對於Facebook用戶,我有另一張存儲用戶Facebook ID的表,然後我只使用Facebook API檢查我的數據庫是否有效。如果是,那麼我將用戶登錄。如果不是,那麼我將它們發送到錯誤頁面或註冊頁面。