【问题标题】:Twitter oauth2/invalidate_token error "Unable to verify your credentials", "authenticity_token_error"Twitter oauth2/invalidate_token 错误“无法验证您的凭据”、“authenticity_token_error”
【发布时间】:2015-11-08 11:54:15
【问题描述】:

我在尝试使用 Twitter oauth2/invalidate_token 时遇到错误。错误是:{"errors":[{"code":99,"message":"Unable to verify your credentials","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 的内容是用户的而不是应用的。

作为测试,当我用对 statuses/user_timeline.json 的 GET 替换对 oauth2/invalidate_token 的调用时,它工作正常。所以看起来设置是正确的。如果我替换上面的相关行,不要管设置,这很好用:

$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 特别谈到了这个错误,但是在它是一个导致错误的仅限应用程序的请求的上下文中,但这不是一个仅限应用程序的请求,并且列出的原因似乎并不适用.

有什么想法吗?

【问题讨论】:

    标签: php twitter oauth twitter-oauth


    【解决方案1】:

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

    【讨论】:

    • 所以不记名令牌和单用户令牌是不同的。并且指定herePOST oauth2/invalidate_token端点用于撤销承载令牌。与此端点有关的错误记录在底部的常见错误案例部分下here
    猜你喜欢
    • 2014-04-14
    • 2016-10-15
    • 2015-10-11
    • 2021-03-08
    • 2013-02-15
    • 2011-08-04
    • 2015-06-01
    • 2020-07-18
    • 2019-05-18
    相关资源
    最近更新 更多