2011-02-14 16 views
1

我在網上找到了一個圖書館,開始使用Twitter OAuth,它讓我連接起來,並能夠從Twitter上下載一些數據。我將令牌保存到一個會話中(我將把它們放到數據庫中進行生產,但我現在只是試圖獲得基本知識)。當我切換到其他頁面並且不再能夠進行API調用時,問題就出現了。Twitter的OAuth驗證只有很好,直到我改變頁面?

這裏是我的代碼:

(如果我的支架不完全匹配在這裏,是因爲我扯下了Twitter的部分以示出),所以保存到一個變量和認證後

session_start(); 
if(strtolower($_GET['via']) == 'twitter'){ 
    //login to twitter 
    $from = strip_tags($_GET['from']); 
    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); 
    /* Get temporary credentials. */ 
    $request_token = $connection->getRequestToken($from); 
    /* Save temporary credentials to session. */ 
    $_SESSION['oauth_token'] = $token = $request_token['oauth_token']; 
    $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; 
    switch ($connection->http_code) { 
     case 200: 
     /* Build authorize URL and redirect user to Twitter. */ 
     $url = $connection->getAuthorizeURL($token); 
     header('Location: ' . $url); 
     break; 
     default: 
     /* Show notification if something went wrong. */ 
     echo 'Could not connect to Twitter. Refresh the page or try again later.'; 
     } 
    }elseif(!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret'])){ 
/* If last connection failed don't display authorization link. */ 
$_SESSION['oauth_verifier'] = $_GET['oauth_verifier']; 
$twitteroauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); 
// Let's request the access token 
$access_token = $twitteroauth->getAccessToken($_SESSION['oauth_verifier']); 
// Save it in a session var 
$_SESSION['access_token'] = $access_token; 
// Let's get the user's info 
$user_info = $twitteroauth->get('account/verify_credentials'); 
$home_timeline = $twitteroauth->get('statuses/home_timeline', array('count' => 3)); 
// Print user's info 
echo "<pre>"; 
print_r($user_info); 
echo "</pre>"; 
echo "<pre>"; 
print_r($home_timeline); 
echo "</pre>"; 
} 

,那麼我就可以按預期查詢API了。之後,我切換到不同的頁面以基本相同的代碼在elseif()塊,我簡單收到以下錯誤消息,當我試圖把數據:

stdClass Object 
(
[request] => /1/account/verify_credentials.json?oauth_consumer_key=djtrixYaxkM4QFzhtfTg&oauth_nonce=8d27112c1ee645b4253c8f803cf428d4&oauth_signature=N6Ug5w%2BNqzo%2FY%2By7UuO0jDqWUdA%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1297720180&oauth_token=&oauth_version=1.0 
[error] => Could not authenticate you. 
) 

我如何能得到這個認證的任何洞察力「堅持「在整個會議?

編輯 正如下面指出的,在URL中,oauth_token沒有任何值。所以我做了一個print_r($_SESSION),我看到$_SESSION['oauth_token']確實有價值。

Array ( 
[oauth_token] => 12345 
[oauth_token_secret] => 67890 
[oauth_verifier] => [access_token] => Array (
    [ "1.0" encoding="UTF-8"?> /oauth/access_token?oauth_consumer_key=111111 
    [amp;oauth_nonce] => 222222 
    [amp;oauth_signature] => 777777= 
    [amp;oauth_signature_method] => HMAC-SHA1 
    [amp;oauth_timestamp] => 1297783851 
    [amp;oauth_token] => 12345 
    [amp;oauth_version] => 1.0 Invalid/expired Token 
    ) 
) 

此數組看起來可能是畸形,但我坦率地承認,我不知道它應該是什麼樣子。而且,由於我沒有對庫進行任何更改 - 只是演示代碼 - 我不確定這是怎麼發生的。

+0

選擇使用的oauth_token或ACCESS_TOKEN爲會話變量之間的關鍵。 – Arvin 2011-02-15 02:08:00

回答

3

請注意oauth_token沒有任何價值。在其他頁面上,您可能未啓動會話,或者您沒有正確地將訪問令牌拉出會話。

+0

好,趕快,謝謝,但現在真的只是更加混亂。該網頁只能使用一次,但如果我刷新它,則不起作用。如果我使用與elseif()塊相同的代碼訪問其他頁面,則不起作用。 session_start()在每個頁面的頂部... – 2011-02-15 15:20:50