2011-12-12 5 views
1

OAuth를 사용하여 권한을 부여 받았지만 문제가있는 Twitter API와 연결된 상태를 유지하려고합니다.Twitter API - 세션에 OAuth 토큰 저장

세션이나 데이터베이스에서 저장된 Oauth 토큰을 사용하여 Twitter API에 연결하려고하면 "Invalid/expired Token"이됩니다.

이 방법이 있습니까? 나는 매번 트위터를 통해 로그인해야하는 내 앱 사용자를 원하지 않는다. 분명히 한 번 내 앱을 승인 한 후에는 충분할 것입니다.

$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은을 받고 있는지 확인하는 것이 좋습니다이 API 페이지 그래서 Twitter OAuth FAQ

에 대한 참조입니다 최종 사용자 자신이 취소 할 때까지 유효해야합니다. 어떻게 보관합니까? 물론 그들은 트위터에서받은 것과 동일합니다, 당신은 올바른 토큰 비밀을 가지고 있습니까? –

+0

세션과 데이터베이스 모두에 저장하려고했지만 어느 쪽이든 오류가 발생합니다. 유일한 방법은 트위터를 사용하여 autorise하고 따라서 $ _GET 메서드를 사용하여 콜백 URL에서 autorisation 키를 얻는 것입니다. 위의 코드를 보여 줬습니다. – LeeTee

답변

2

난 당신에 대한 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. 

에 말을 항상 나중 단계에서 사용할 수있는 것입니다. 여기

내가 당신이 응용 프로그램의 설정을 변경하지 않는 당신이 세션/데이터베이스

+0

토큰 비밀이없는 액세스 토큰에 연결할 수 없다는 것을 깨달았습니다. 따라서 oauth_token_secret도 데이터베이스에 저장해야합니다. 당신의 도움을 주셔서 감사합니다. – LeeTee

+0

@LeeTee 나는 트위터와 통합되지 않았지만 구글과 함께, 예, 당신은 동일한 secret_token을 전달해야한다. 그렇지 않으면 항상 구글로부터 차기를 얻을 것이다. :) –

관련 문제