代码之家  ›  专栏  ›  技术社区  ›  kumade

Twitter API在调用状态/更新时响应“您的凭据不允许访问此资源”。json

  •  7
  • kumade  · 技术社区  · 7 年前

    我正在使用 Hybridauth 之后,推特将我重定向到指定的回调URL,在那里我得到一对access\u令牌和access\u令牌密钥。 但当我试图用这些令牌发推特时,它会给我:

    {"errors":[{"code":220,"message":"Your credentials do not allow access to this resource."}]} 
    

    $config = [
        'authentication_parameters' => [
        //Location where to redirect users once they authenticate 
        'callback' => 'https://mysite/twittercallback/',
        //Twitter application credentials
        'keys' => [
                'key'     => 'xxx', 
                'secret' => 'yyy' 
        ],
        'authorize' => true
        ]
    ];
    
    $adapter = new Hybridauth\Provider\Twitter($config['authentication_parameters']);
    
    //Attempt to authenticate the user 
    $adapter->setAccessToken(/*tokens I've got from getAccessToken() on /twittercallback/*/);
    
    if(! $adapter->isConnected()) {
        // never goes here, so adapter is connected
        return null;
    }
    
    try{  
        $response = $adapter->setUserStatus('Hello world!');
    }
    catch (\Exception $e) {
        // here I've got the error
        echo $e->getMessage();
        return;
    }
    

    尝试重新创建令牌和密钥\密钥对,并多次通过应用程序的身份验证过程,包括输入我的Twitter帐户的密码(如stackoverflow上的一些帖子所建议的),但仍然存在此错误。

    this ,Hybridauth在最近的版本中修复了这个问题。

    4 回复  |  直到 7 年前
        1
  •  4
  •   Jonas    7 年前

    看起来您使用的是应用程序身份验证,而不是用户身份验证。为了发布推文,您必须作为用户进行身份验证。此外,确保你的Twitter应用程序具有读/写权限。

        2
  •  0
  •   kumade    7 年前

    required by Twitter ,我注意到Hybris没有在标题中添加非常重要的部分: oauth_token . 至少在Twitter adapter的代码中没有这样做,在应用访问令牌的场景中也没有这样做 setAccessToken() consumerToken OAuth1 班 因此,为了正确初始化消费者令牌,我覆盖了 apiRequest 方法 Twitter

    public function apiRequest($url, $method = 'GET', $parameters = [], $headers = [])
        {
            if(empty($this->consumerToken)) {
                $this->initialize();
            }
    
            return parent::apiRequest($url, $method, $parameters, $headers);
        }
    

    我不确定我是否已经用最好的方法修复了它,但只要它能工作,那就好了。

        3
  •  0
  •   Oleg Kuzava    7 年前

    供您参考 setAccessToken 已在v3.0.0-beta中修复。2(见PR https://github.com/hybridauth/hybridauth/pull/880

        4
  •  0
  •   Juraj Martinka    5 年前

    我在实现 sample app in clojure 下面的资源极大地帮助我解决了关于仅应用程序身份验证和用户身份验证的困惑: https://developer.twitter.com/en/docs/basics/authentication/overview/oauth