私は現在、ウェブサイトで働いています。いくつかの種類の承認があり、そのうちの1つは「Twitter経由」です。私はAbraham WilliamsのTwitterOAuth Libraryを使用しています。以下のスクリプトの仕組みを説明しようとします:
オペラがapi.twitter.comからコールバックURLにリダイレクトする際に問題があることを除いて、完璧に動作します。リダイレクトはまったく実行されないようです。
ここにソースがあります:
index.php
<?php
session_start();
session_destroy();
?>
<meta charset="utf-8" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
function popup(url)
{
var addr = document.location.href.replace('index.php','');
popUpObj = window.open(addr + url, 'Twitter', 'width=700,height=600,menubar=yes,status=yes');
}
function transferdata(data)
{
if (data.screen_name)
{
(elem = document.getElementById('tw-login')).parentNode.removeChild(elem);
document.getElementById('menu').innerHTML = 'Hello, ' + data.screen_name;
}
else
document.getElementById('menu').innerHTML = 'Twitter didn\'t authorize you :(';
}
</script>
Log in
Log out
login.php
<?php
session_start();
include 'twitteroauth/twitteroauth.php';
define('TWITTER_KEY', '*******');
define('TWITTER_KEY_SECRET', '*******');
$twitteroauth = new TwitterOAuth(TWITTER_KEY, TWITTER_KEY_SECRET);
$requestToken = $twitteroauth->getRequestToken();
$_SESSION['oauth_token'] = $requestToken['oauth_token'];
$_SESSION['oauth_token_secret'] = $requestToken['oauth_token_secret'];
if($twitteroauth->http_code == 200)
{
$url = $twitteroauth->getAuthorizeURL($requestToken['oauth_token']);
header('Location: ' . $url);
}
else
{
die('Something wrong happened.');
}
callback.php
<?php
session_start();
include 'twitteroauth/twitteroauth.php';
define('TWITTER_KEY', '*******');
define('TWITTER_KEY_SECRET', '*******');
if (!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret']))
{
$twitteroauth = new TwitterOAuth(TWITTER_KEY, TWITTER_KEY_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$accessToken = $twitteroauth->getAccessToken($_GET['oauth_verifier']);
$_SESSION['access_token'] = $accessToken;
$userinfo = $twitteroauth->get('account/verify_credentials');
}
else
header('Location: login.php');
?>
<meta charset="utf-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(SendToMain());
function SendToMain()
{
if(window.opener != null || !window.opener.closed)
{
window.opener.transferdata(<?php echo json_encode($userinfo); ?>);
window.close();
}
}
</script>
session_clear.php
<?php
session_start();
session_destroy();
header('Location: index.php');