Twitter OAuth:无效或过期的令牌[不重复]
Twitter OAuth : Invalid or expired token [its NOT duplicate]
在有人匆忙将此问题标记为重复之前,让我告诉你 它不是重复的
我已经检查过像 this, this, this and this 这样的类似问题,但这些都是 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_Key
和 Customer_Secret
,但即使这样似乎也无济于事。
我们将不胜感激任何形式的帮助。谢谢。
终于找到解决方法了
您需要做的就是,在收到回调后,使用新的访问令牌再次初始化 class。
$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']);
我不知道为什么会这样,但它确实很有效。从 .
找到这个解决方案
我在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'));
}
在有人匆忙将此问题标记为重复之前,让我告诉你 它不是重复的
我已经检查过像 this, this, this and this 这样的类似问题,但这些都是 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_Key
和 Customer_Secret
,但即使这样似乎也无济于事。
我们将不胜感激任何形式的帮助。谢谢。
终于找到解决方法了
您需要做的就是,在收到回调后,使用新的访问令牌再次初始化 class。
$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']);
我不知道为什么会这样,但它确实很有效。从
我在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'));
}