Twitter OAuth:令牌无效或过期[不重复]

时间:2015-06-14 07:11:40

标签: php twitter oauth twitter-oauth

在任何人匆忙将此问题标记为重复之前,请告诉您 ITS NOT DUPLICATE

我已经检查了类似的问题,例如thisthisthisthis,但这些问题都已有2年历史了那么那些答案就没用了。

所以这就是问题所在。我正在使用亚伯拉罕的图书馆,可以找到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,但即便如此也没有帮助。

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

2 个答案:

答案 0 :(得分: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找到了这个解决方案。

答案 1 :(得分:0)

我在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'));
}