【问题标题】:Twitter OAuth - Invalid or expired access tokenTwitter OAuth - 访问令牌无效或过期
【发布时间】:2015-04-23 04:27:16
【问题描述】:

我正在尝试使用最新版本的 twitteroauth 分享帖子。下面是我的代码。

require APP."Vendor/twitteroauth-master/autoload.php"; // twitter v0.5.1 SDK

if(isset($_REQUEST['oauth_verifier'])) {

        $request_token = [];
        $request_token['oauth_token'] = $this->Session->read('twtr_oauth_token');
        $request_token['oauth_token_secret'] = $this->Session->read('twtr_oauth_token_secret');

        /* If denied, bail. */
        if (isset($_REQUEST['denied'])) {
            exit('Permission was denied. Please start over.');
        }

        /* If the oauth_token is not what we expect, bail. */
        if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
            $this->Session->write("twtr_oauth_token" , '');
            $this->Session->write("twtr_oauth_token_secret" , '');
            exit;
        }

        debug($request_token);

        /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
        $connection = new TwitterOAuth("KEY", "SECRET", $request_token['oauth_token'], $request_token['oauth_token_secret']);

        debug($connection);

        $content = $connection->get('account/verify_credentials');

        debug($content);

        /* Request access token from twitter */
        $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

        /** Finally post things */
        $result = $connection->post("statuses/update", array("status" => "hello world"));

        if(isset($result->errors) && count($result->errors) > 0) {
            debug($connection->post("statuses/update", array("status" => "hello world")));
            exit;
        }

        $this->redirect("http://twitter.com");

    } else {

        $connection = new TwitterOAuth("KEY", "SECRET");

        /** Get Temp Token */
        $request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => "https://180.211.99.162:9051/widgetapi/twitterOauth"));

        switch ($connection->getLastHttpCode()) {
            case 200:
                /** Write OAuth token and secret into session */
                $this->Session->write("twtr_oauth_token" , $request_token['oauth_token']);
                $this->Session->write("twtr_oauth_token_secret" , $request_token['oauth_token_secret']);

                /** Build Auth URL */
                $url = $connection->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token']));

                /** Redirect */
                $this->redirect($url);
                break;
            default:
                /* Show notification if something went wrong. */
                echo 'Could not connect to Twitter. Refresh the page or try again later.';
        }
    }

当我尝试实现这一点时,我得到了无效或过期的访问令牌。

调试信息

    /app/Controller/WidgetapiController.php (line 258)
array(
    'oauth_token' => 'AU549WSBbnxvibRcU5jzUzOwFAoUiTXs',
    'oauth_token_secret' => 'NRmkbByjjAPGQLJK06DaUauYfa38kpY6'
)
/app/Controller/WidgetapiController.php (line 261)
object(Abraham\TwitterOAuth\TwitterOAuth) {
    [protected] timeout => (int) 5
    [protected] connectionTimeout => (int) 5
    [protected] decodeJsonAsArray => false
    [protected] userAgent => 'TwitterOAuth (+https://twitteroauth.com)'
    [protected] proxy => array()
    [private] response => object(Abraham\TwitterOAuth\Response) {
        [private] apiPath => null
        [private] httpCode => (int) 0
        [private] headers => array()
        [private] body => array()
        [private] xHeaders => array()
    }
    [private] bearer => null
    [private] consumer => object(Abraham\TwitterOAuth\Consumer) {
        key => 'KEY'
        secret => 'SECRET'
        callbackUrl => null
    }
    [private] token => object(Abraham\TwitterOAuth\Token) {
        key => 'AU549WSBbnxvibRcU5jzUzOwFAoUiTXs'
        secret => 'NRmkbByjjAPGQLJK06DaUauYfa38kpY6'
    }
    [private] signatureMethod => object(Abraham\TwitterOAuth\HmacSha1) {

    }
}
/app/Controller/WidgetapiController.php (line 263)
object(stdClass) {
    errors => array(
        (int) 0 => object(stdClass) {
            code => (int) 89
            message => 'Invalid or expired token.'
        }
    )
}
/app/Controller/WidgetapiController.php (line 271)
object(stdClass) {
    errors => array(
        (int) 0 => object(stdClass) {
            code => (int) 89
            message => 'Invalid or expired token.'
        }
    )
}

我无法弄清楚这个问题!知道这里有什么问题吗?

【问题讨论】:

    标签: php cakephp-2.0 twitter-oauth


    【解决方案1】:

    收到回调后,使用新的访问令牌再次初始化类

    /* Request access token from twitter */
    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
    
    $connection = new TwitterOAuth("KEY", "SECRET", $access_token['oauth_token'], $access_token['oauth_token_secret']); 
    

    【讨论】:

    • 对我来说,我也给了 oauth_token。使其在行中工作 $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier'], "oauth_token"=> $oauth_token));
    • 考虑到上面没有文档,用这个库找出不记名令牌是一场噩梦。感谢这个答案,我能够解决我的问题。谢谢。
    【解决方案2】:

    使用最新版本的TwitterOAuth,并在此线程中@user3989103 的回答和https://twittercommunity.com/t/twitter-oauth-verifier-does-not-always-work/31672 的帮助下,对我有用的是:

    $connection = new TwitterOAuth($key, $secret, $_SESSION['request_token'], $_SESSION['request_token_secret']);
    
    $access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_REQUEST['oauth_verifier'], 'oauth_token'=> $_REQUEST['oauth_token']));
    
    $connection = new TwitterOAuth($key, $secret, $access_token['oauth_token'], $access_token['oauth_token_secret']);
    
    $credentials = $connection->get('account/verify_credentials');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多