Аутентификация в Twitter / PHP Oauth: пользователя просят обновлять приложение каждый раз, когда он пытается аутентифицироваться - PullRequest
1 голос
/ 02 июня 2011

Сам код довольно простой. Я пытаюсь разрешить пользователю подключаться к Twitter, а затем использовать Twitter в качестве средства аутентификации (на самом деле это называется 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 Ответ

1 голос
/ 02 июня 2011

Взгляните на этот документ о потоке "Войти через Twitter", который, похоже, вы пытаетесь реализовать.Единственное, что я заметил в вашем коде, это то, что вы звоните oauth/authorize, где вы должны звонить oauth/authenticate.Вот соответствующая выдержка:

Нормальный поток [OAuth] предписывает, чтобы приложения отправляли маркеры запросов в oauth / authorize в реализации Твиттера спецификации OAuth.Чтобы воспользоваться преимуществами «Войти через Twitter», приложения должны вместо этого отправлять токены запроса, полученные в параметре oauth_token, в oauth / authenticate.

...