代码本身非常基础。我试图允许用户连接到Twitter,然后使用Twitter作为身份验证的意思(afaik,这称为OpenId)。然而,问题在于,每当用户执行代码时,他都会被要求实现应用程序 - 相反,我希望它返回某种变量,表明用户已经连接到应用程序。
$oauth = new OAuth(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET);
$callback_url = 'http://guubo.com/connect/1';
try
{
if(empty($_GET['oauth_token']))
{
unset($_SESSION['hp']['twitter']);
}
if(empty($_SESSION['hp']['twitter']['oauth_token_secret']))
{
$access_token = $oauth->getRequestToken('https://api.twitter.com/oauth/request_token', $callback_url);
//die(var_dump( $access_token ));
$_SESSION['hp']['twitter']['oauth_token_secret'] = $access_token['oauth_token_secret'];
header('Location: https://api.twitter.com/oauth/authorize?oauth_token=' . $access_token['oauth_token']);
exit;
}
elseif(!empty($_GET['oauth_token']))
{
$oauth->setToken($_GET['oauth_token'], $_SESSION['hp']['twitter']['oauth_token_secret']);
unset($_SESSION['hp']['twitter']);
$access_token_info = $oauth->getAccessToken('https://api.twitter.com/oauth/access_token');
$db->exec("INSERT INTO `user_tokens` (`user_id`, `network_id`, `oauth_token`, `oauth_token_secret`) VALUES ({$db->quote($user['id'])}, {$db->quote($network['id'])}, {$db->quote($access_token_info['oauth_token'])}, {$db->quote($access_token_info['oauth_token_secret'])})");
$response_array = array();
parse_str($oauth->getLastResponse(), $last_response);
#die(var_dump( $last_response[''] ));
}
}
catch(OAuthException $e)
{
echo $e->getMessage();
exit;
}
答案 0 :(得分:1)
看看这个document关于“使用Twitter登录”流程,看起来您正在尝试实施。我在您的代码中注意到的一件事是您正在调用oauth/authorize
,您应该在其中调用oauth/authenticate
。这是一个相关的摘录:
正常的[OAuth]流程决定了这一点 应用程序发送请求令牌 在Twitter上的oauth / authorize OAuth的实施 规格。从中获利 “使用Twitter登录”,应用程序 应该发送收到的请求令牌 oauth_token参数 相反,oauth / authenticate。