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 の認証でスタックするようです。私が間違っていること、またはこのスクリプトを改善/修正するために何ができるか考えていますか? 私はこれを理解しようとして頭がいっぱいです。
前もって感謝します!