Twitter身份验证/ PHP Oauth:要求用户每次尝试进行身份验证时都要对应用程序进行实时操作

时间:2011-06-02 16:34:40

标签: php openid twitter

代码本身非常基础。我试图允许用户连接到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;
}

1 个答案:

答案 0 :(得分:1)

看看这个document关于“使用Twitter登录”流程,看起来您正在尝试实施。我在您的代码中注意到的一件事是您正在调用oauth/authorize,您应该在其中调用oauth/authenticate。这是一个相关的摘录:

  

正常的[OAuth]流程决定了这一点   应用程序发送请求令牌   在Twitter上的oauth / authorize   OAuth的实施   规格。从中获利   “使用Twitter登录”,应用程序   应该发送收到的请求令牌   oauth_token参数   相反,oauth / authenticate。