0

Twitter API を使用して非常に単純なログイン スクリプトを実行しようとしています。必要なのは、ユーザーが Twitter 経由でサイトにログインする簡単な方法だけです。現在ログインしていない場合は、ホームページに「ログインまたはTwitterで登録」というボタンがあります。ログインしている場合は、ユーザー名とアバターを表示したいと思います。だからここに私がこれまで持っているものがありますが、うまくいきません。

ホームページ(index.php)には、次のものがあります。

 <?php
      require_once 'lib/twitteroauth/OAuth.php';
      require_once 'lib/twitteroauth/twitteroauth.php';
      require_once 'config/config.php';
      session_start();
 ?>

config.php には次のコードが含まれています (コンシューマー キーとコンシューマー シークレットは明らかに置き換えられています)。

 <?php
      $consumer_key = 'consumer key';
      $consumer_secret = 'consumer secret';
 ?>

後でページを下ると、ログイン状態に応じて、ログイン/登録メッセージ、またはユーザー名/アバターのいずれかを表示する次のものもあります。

 <?php
      if (!empty($_SESSION['request_token']) && !empty($_SESSION['request_token_secret'])) {
           $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);
           $user = $twitterOAuth->get('account/verify_credentials');

           echo "Welcome ".$user->screen_name;
           echo "<img src='".$user->profile_image_url."'/>";
      } else {
           echo "<a href='twitter_login.php'>Sign In / Register With Twitter</a>";
           echo "<img src='images/twitter-banner.png'/>";
      }
 ?>

これが index.php ページです。ご覧のとおり、ログインしていない状態で [サインイン] リンクをクリックすると、別のページ (twitter_login.php) に移動します。そのファイルの内容は次のとおりです。

 <?php
      require_once 'lib/twitteroauth/OAuth.php';
      require_once 'lib/twitteroauth/twitteroauth.php';
      require_once 'config/config.php';

      session_start();

      $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret);

      $requestToken = $twitterOAuth->getRequestToken();

      $_SESSION['request_token'] = $requestToken['oauth_token'];
      $_SESSION['request_token_secret'] = $requestToken['oauth_token_secret'];

      header ('Location: '.$twitterOAuth->getAuthorizeURL($requestToken));
 ?>

このページは、ユーザーを Twitter の認証 URL に自動的にリダイレクトします。twitterに設定されているコールバックURLは「authenticate.php」です。そのファイルの内容は次のとおりです。

 <?php
      require_once 'lib/twitteroauth/OAuth.php';
      require_once 'lib/twitteroauth/twitteroauth.php';
      require_once 'config/config.php';

      session_start();

      if ($_SESSION['request_token'] == $_GET['oauth_token']) {
           $twitterOAuth = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);

           $accessToken = $twitterOAuth->getAccessToken();

           if (isset($accessToken['user_id']) && is_numeric($accessToken['user_id'])) {
                $_SESSION['request_token'] = $accessToken['oauth_token'];
                $_SESSION['request_token_secret'] = $accessToken['oauth_token_secret'];
                header('Location: index.php');
           } else {
                echo "Something went wrong.";
           }
      } else {
           echo "OAuth Tokens Do Not Match.";
      }
 ?>

ログインに成功すると、ユーザーは index.php にリダイレクトされ、ホームページにユーザー名/アバターが表示されます。私自身のテストでは、Firefox で試してみると問題なく動作することがわかりましたが、他のブラウザー (Safari/Chrome) で試してみると、twitter の認証でスタックするようです。私が間違っていること、またはこのスクリプトを改善/修正するために何ができるか考えていますか? 私はこれを理解しようとして頭がいっぱいです。

前もって感謝します!

4

1 に答える 1

0

コールバック URL が壊れていると思います。あらゆる種類のツールまたはブラウザー デバッガーで確認して、認証されている URL に何が起こっているかを調べることができます。

于 2012-06-19T07:01:09.510 に答える