2013-03-24 59 views
1

所以這個工作正常......但是當我刷新頁面兩次(或點擊兩個包含此腳本的頁面快)它給出了這個錯誤 OAuthException:必須使用一個活動的訪問令牌來查詢有關當前用戶的信息。 任何想法?Same facebook problems ... OAuthException:必須使用活動的訪問令牌來查詢有關當前用戶的信息

<?php 

    $app_id = '***************'; 
    $app_secret = '**************'; 
    $app_namespace = '****************'; 

    $app_url = 'http://apps.facebook.com/' . $app_namespace . '/'; 
    $scope = 'email,publish_actions'; 

    // Init the Facebook SDK 
    $facebook = new Facebook(array(
    'appId' => $app_id, 
    'secret' => $app_secret, 
    )); 

    // Get the current user 
    $user = $facebook->getUser(); 

    // If the user has not installed the app, redirect them to the Login Dialog 

    if (!$user) { 
    $loginUrl = $facebook->getLoginUrl(array(
     'scope' => $scope, 
     'redirect_uri' => $app_url, 
    )); 

    print('<script> top.location.href=\'' . $loginUrl . '\'</script>'); 
    } 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me', 'POST'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
//<img src="https://graph.facebook.com/?php echo $user; ?/picture"> 
//?php print_r($user_profile); ? 
?> 

回答

1

我個人覺得更容易管理自己的access_token。 Facebook的Graph API通過要求傳入一個access_token來保護受保護的端點.PHP SDK抽象化了這一點,但我從來不熟悉Facebook處理信息,因爲有時它只是不起作用。這並不是說圖書館是壞的,但只有那我沒有正確使用它。記住這個警告。

它看起來像你正在使用Facebook的畫布應用程序。當用戶首次成功進行身份驗證時,Facebook將在$_GET中發送access_token。此時,你應該將保存到你的數據庫中,因爲該訪問令牌有效期爲3個月左右。

在點,從那以後,你可以通過在調用參數access_token

try { 
    $user_profile = $facebook->api('/me', 'POST', array(
     "access_token" => '' // access token goes here 
    )); 
} catch (FacebookApiException $e) { 
    // error handling 
} 

鑑於Facebook正在恢復,你需要一個訪問令牌才能調用/me資源錯誤,它看起來像$facebook->getUser();正在返回的東西。你可能想仔細檢查它是什麼。


雖然我在這裏,你用這樣的邏輯:

if (!conditional) { 
    // do something 
} 
if (conditional) { 
    // do something else 
} 

混亂。使用else

if (conditional) { 
    // do something 
} else { 
    // do something else 
} 
相關問題