我在网上找到了一个图书馆,开始使用Twitter OAuth,它让我连接起来,并能够从Twitter上下载一些数据。我将令牌保存到一个会话中(我将把它们放到数据库中进行生产,但我现在只是试图获得基本知识)。当我切换到其他页面并且不再能够进行API调用时,问题就出现了。Twitter的OAuth验证只有很好,直到我改变页面?
这里是我的代码:
(如果我的支架不完全匹配在这里,是因为我扯下了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.
)
我如何能得到这个认证的任何洞察力“坚持“在整个会议?
编辑 正如下面指出的,在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
)
)
此数组看起来可能是畸形,但我坦率地承认,我不知道它应该是什么样子。而且,由于我没有对库进行任何更改 - 只是演示代码 - 我不确定这是怎么发生的。
选择使用的oauth_token或ACCESS_TOKEN为会话变量之间的关键。 – Arvin 2011-02-15 02:08:00