API Twitter - сохранение токена OAuth в сессии - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь найти способ поддерживать связь с Twitter API после авторизации с использованием OAuth, но у меня проблемы.

Я получаю "Invalid / expired Token" при попытке подключиться к Twitter API с помощью сохраненного токена Oauth в сеансе или базе данных.

Есть ли способ сделать это?Я не хочу, чтобы пользователи моего приложения каждый раз заходили в 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;    
} 

1 Ответ

2 голосов
/ 12 декабря 2011

Я полагаю, что вы говорите о access_token, который вы получите из твиттера в качестве последней части рукопожатия 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

Поэтому я предлагаю вам убедиться, что вы не меняете настройки приложения и получаете действительный токен доступа из сессии / базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...