【问题标题】:Twitter OAuth : Invalid or expired token [its NOT duplicate]Twitter OAuth:无效或过期的令牌[不重复]
【发布时间】:2015-08-29 20:48:27
【问题描述】:

在有人匆忙将此问题标记为重复之前,让我告诉你ITS NOT DUPLICATE

我已经检查过类似的问题,例如thisthisthisthis,但这些问题都已有 2 年历史了,并且从那时起图书馆已经发生了太多变化,所以这些答案没有用。

所以问题来了。我正在使用 abraham 的图书馆,可以找到 here。以下是我正在使用的代码:

if(!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret']))
{
    $connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
    $_SESSION['access_token'] = $access_token;

    $user_info = $connection->get("account/verify_credentials");
    print_r($user_info);
}

从我上面做的print_r,我得到的结果如下:

stdClass Object ( [errors] => Array ( [0] => stdClass Object ( [code] => 89 [message] => Invalid or expired token. ) ) )

由于invalid/expired token,我无法在工作中取得进展。所以我退后一步做了:

var_dump($access_token);

得到的结果是:

array(5) { 
   ["oauth_token"]=> string(50) "*********" 
   ["oauth_token_secret"]=> string(45) "*********" 
   ["user_id"]=> string(10) "***My user id****" 
   ["screen_name"]=> string(9) "***My screen name****" 
   ["x_auth_expires"]=> string(1) "0" 
}

在这里您看到最后一个元素是["x_auth_expires"],其值为0。我认为这个元素没有出现在旧版本的库中。我想这就是导致问题的原因。

我尝试重新生成我的Customer_KeyCustomer_Secret,但即使这样似乎也无济于事。

我们将不胜感激任何形式的帮助。谢谢。

【问题讨论】:

    标签: php twitter oauth twitter-oauth


    【解决方案1】:

    终于找到了解决办法。

    所有你需要做的是,一旦你得到回调,用新的访问令牌再次初始化类。

    $connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
    
    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
    
    $connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $access_token['oauth_token'], $access_token['oauth_token_secret']);
    

    我不知道为什么会这样,但它确实像一个魅力。从here 找到此解决方案。

    【讨论】:

    • 有道理。如果您不更新该类,它会尝试使用不再有效的初始临时凭证执行第二次 API 调用。通过使用新的长期凭证重新创建实例,您就可以开始了。
    • 该解决方案适用于 requests-oauthlib 和 Python。我根据 requests-oauthlib 语法做了一些更改。
    【解决方案2】:

    我在 CI 回调函数中使用过这个

    if($this->input->get('denied') != ''){
       /* Remove all token from session  */
       $this->connection = NULL;
       $this->connection = $this->twitteroauth->create($this->config->item('twitter_consumer_token'), $this->config->item('twitter_consumer_secret'));
       $this->session->set_flashdata('account_block_error_msg',"Access denied");
       redirect(base_url('/Sign-in'));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      相关资源
      最近更新 更多