Twitter oauth2 / invalidate_token错误“无法验证您的凭据”,“authenticity_token_error”

时间:2015-11-07 20:24:24

标签: php twitter oauth twitter-oauth

尝试使用Twitter oauth2 / invalidate_token时出错。错误是:{“errors”:[{“code”:99,“message”:“无法验证您的凭据”,“label”:“authenticity_token_error”}}}

我正在使用TwitterAPIExchange.php包装器,您可以找到herehere。该框架是Codeigniter 3.0,这个代码在AJAX调用的方法中(但我认为这些都不重要。)

这是我的代码:

$settings = array(
    'oauth_access_token' => $this->session->userdata('oauth_token'),
    'oauth_access_token_secret' => $this->session->userdata('oauth_token_secret'),
    'consumer_key' => TWITTER_CONSUMER_KEY,
    'consumer_secret' => TWITTER_CONSUMER_SECRET);

$twitter = new TwitterAPIExchange($settings);
$url = 'https://api.twitter.com/oauth2/invalidate_token';
$requestMethod = 'POST';
$postfields = array('access_token' => $this->session->userdata('oauth_token'));
$response_str = $twitter->buildOauth($url, $requestMethod)
                ->setPostfields($postfields)
                ->performRequest();
$response_arr = [];
parse_str($response_str, $response_arr);

$ response_str的内容是错误。 oauth_token和oauth_token_secret的内容是用户不是应用程序的内容。

作为测试,当我将对oauth2 / invalidate_token的调用替换为状态/ user_timeline.json的GET时,它可以正常工作。所以看起来设置是正确的。如果我替换上面的相关行,请单独保留设置,这样可以正常工作:

$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$getfield = '?user_id=' . $uid;
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
     ->buildOauth($url, $requestMethod)
     ->performRequest();

This page in the docs特别谈到了这个错误,但是在它是一个仅限应用程序的请求导致错误的情况下,但这不是一个仅限应用程序的请求,并且列出的原因似乎不大申请。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

找到答案。我混淆了两个概念。在仅应用程序身份验证的情况下,oauth2 / invalidate_token调用用于承载令牌,现在有意义的是为什么仅针对该情况记录错误。我想撤销一个用户令牌,我已经开始学习,这是不可能的。所以,管理这个的唯一方法是假装撤销我身边的应用程序,并跟踪它。该应用程序仍将在用户的Twitter帐户中进行身份验证。举个例子,试试Pinterest。您可以通过Pinterest打开Twitter,Pinterest应用程序将显示在您的Twitter帐户中。如果您通过Pinterest关闭应用程序,并再次查看您的Twitter应用程序,它仍将存在。换句话说,你没有把它关掉。我要离开这里,以防其他人不浪费时间在这上面。很明显我们应该能够撤销一个应用程序(例如Facebook允许这样做),但似乎你不能用Twitter。如果有人对此主题有更多或不同的知识,请发布。