session
  • oauth
  • twitter
  • 2011-12-12 105 views 1 likes 
    1

    我試圖找到一種方法,一旦使用OAuth授權但有問題,就可以與Twitter API保持連接。Twitter API - 在會話中保存OAuth令牌

    當使用會話或數據庫中保存的Oauth令牌嘗試連接到Twitter API時,我得到"Invalid/expired Token"

    有沒有辦法做到這一點?我不希望我的應用程序的用戶每次都必須通過Twitter登錄。當然,一旦他們授權我的應用程序一次,這應該夠了?

    $consumer_key = 'consumerkey'; 
    $consumer_secret = 'consumersecret'; 
    
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret); 
    
    if (isset($_GET['oauth_token'])){ 
        $oauth_token = $_GET['oauth_token']; 
    } else if ($_SESSION['oauth_token']){ 
        $oauth_token = $_SESSION['oauth_token']; 
    
        echo $_SESSION['oauth_token']; 
    } else { 
        //see if authorisation already set up in DB 
        $query = mysql_query("SELECT oauth_token FROM PingSocialMediaUsers WHERE oauth_provider = 'twitter' AND clientID = '$clientID'"); 
        $result = mysql_fetch_row($query); 
        $oauth_token = $result[0]; 
    } 
    
    if($oauth_token == ''){ 
        $url = $twitterObj->getAuthorizationUrl(); 
        $twitter_login = $url; 
    } else { 
        $twitterObj->setToken($oauth_token); 
        $token = $twitterObj->getAccessToken(); 
        $twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);  
        $_SESSION['oauth_token'] = $token->oauth_token; 
        $_SESSION['oauth_secret'] = $token->oauth_token_secret; 
        $twitterInfo= $twitterObj->get_accountVerify_credentials(); 
        $twitterInfo->response; 
    
        echo $twitterInfo->response['error']; 
        //echo '<pre>'; 
        //print_r($twitterInfo); 
        $id = $twitterInfo->id; 
        $username = $twitterInfo->screen_name; 
    
        //add to details database 
        //find the user by ID 
        if ($id != ''){ 
         $query = mysql_query("SELECT * FROM PingSocialMediaUsers WHERE oauth_provider = 'twitter' AND oauth_uid = '$id'"); 
         $result = mysql_fetch_array($query); 
    
         // If does not exist add to database 
         if(empty($result)){ 
          $query = mysql_query("INSERT INTO PingSocialMediaUsers (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) VALUES ('twitter', {$id}, '{$username}', '{$_SESSION['oauth_token']}', '{$_SESSION['oauth_secret']}')"); 
          $query = mysql_query("SELECT * FROM PingSocialMediaUsers WHERE id = " . mysql_insert_id()); 
          $result = mysql_fetch_array($query); 
         } else { 
          //update the tokens 
          $query = mysql_query("UPDATE PingSocialMediaUsers SET oauth_token = '{$_SESSION['oauth_token']}', oauth_secret = '{$_SESSION['oauth_secret']}' WHERE oauth_provider = 'twitter' AND oauth_uid = {$id}"); 
         } 
    
         $_SESSION['id'] = $result['id']; 
         $_SESSION['username'] = $result['username']; 
         $_SESSION['oauth_uid'] = $result['oauth_uid']; 
         $_SESSION['oauth_provider'] = $result['oauth_provider']; 
         $_SESSION['oauth_token'] = $result['oauth_token']; 
         $_SESSION['oauth_secret'] = $result['oauth_secret'];  
        } 
    
        $twitterAuth = TRUE;  
    } 
    
    +0

    你的訪問令牌得到一個有效的access_token應該是有效的,直到最終用戶自己撤銷。你如何儲存它們?當然,它們與從twitter中收到的相同,確定你有權利祕密? –

    +0

    我已經嘗試將它存儲在會話和數據庫中,但無論如何,我得到的錯誤。它唯一的工作時間是我使用Twitter進行自動身份驗證,因此使用$ _GET方法從回調URL獲取自動密鑰。我已經顯示了上面的代碼。 – LeeTee

    回答

    2

    我相信你在談論access_token你會從Twitter的OAuth的握手之後,你可以去訪問用戶代表有服務的最後一部分得到。

    這裏是他們在說什麼在那裏的官方開發者頁面

    We do not currently expire access tokens. 
    Your access token will be invalid if a user explicitly 
    rejects your application from their settings or if a Twitter admin suspends 
    your application. If your application is suspended there will be 
    a note on your application page saying that it has been suspended. 
    

    所以,你可以在令牌非常好存儲在數據庫中,並可以在後面的階段總是使用。

    這裏是參照有API頁面 Twitter OAuth FAQ

    所以我建議你要確保你沒有改變任何應用程序設置,並正在從會話/數據庫

    +0

    我意識到它不允許我在沒有令牌密碼的情況下連接訪問令牌。因此我也需要將oauth_token_secret保存在數據庫中。謝謝你的幫助。 – LeeTee

    +0

    @LeeTee我還沒有與Twitter整合,但與谷歌,是的,你必須通過相同的secret_token否則總是會從谷歌得到一個踢:) –

    相關問題