1

Twitter OAuth の使用を開始するためのライブラリをオンラインで見つけたところ、接続が確立され、Twitter からデータを取得できるようになりました。トークンをセッションに保存します (本番用にトークンをデータベースに入れますが、今は基本的なことを取得しようとしています)。問題は、別のページに変更して API 呼び出しを行うことができなくなったときに発生します。

これが私のコードです:

(括弧が正確に一致しない場合は、表示するために 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.
)

この認証をセッション全体で「固定」する方法についての洞察はありますか?

EDIT 以下で指摘されているように、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 
    )
)

この配列は不正な形式のように見えますが、どのように表示されるべきかわからないことを率直に認めます。そして、私はライブラリに何の変更も加えていないので (デモ コードだけです)、どうしてそうなったのかわかりません。

4

2 に答える 2

3

値がないことに注意しoauth_tokenてください。他のページでは、おそらくセッションを開始していないか、セッションからアクセス トークンを適切に引き出していません。

于 2011-02-15T01:38:15.893 に答える
0

OAuth oauth_timestamp を数時間増やしてみてください。

PHP OAuth クライアントでは、次のようになります。

private static function generate_timestamp() {
    return time()+5*3600;
}

資力

http://www.backwardcompatible.net/149-Twitter-Timestamp-out-of-bounds-solved

于 2015-03-10T15:56:02.250 に答える