Twitter API - 在会话中保存OAuth令牌

Twitter API - 在会话中保存OAuth令牌

问题描述:

我试图找到一种方法,一旦使用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

我相信你在谈论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否则总是会从谷歌得到一个踢:) –