关于 oauth:HybridAuth Twitter 失败 401

HybridAuth Twitter Failure 401

问题
我能够通过 HybridAuth 库连接到 Twitter,但它停止了工作。发布到 Twitter 帐户也很实用。

我已经尝试过什么
重置我的 Twitter 应用访问令牌。
创建一个全新的 Twitter 应用程序。
使用 HybridAuth 调试模式进行故障排除。

错误信息
"身份验证失败。用户已取消身份验证或提供商拒绝连接。

原始错误消息:身份验证失败!推特返回错误。 401 未经授权。"

我的研究
这似乎归因于缺少密钥和秘密,但我在 Twitter 配置文件中设置了这些。

密码

1
2
3
4
5
6
7
8
            $hybridauth = new Hybrid_Auth( $config );

            $adapter = $hybridauth->authenticate("Twitter" );
            $hybridauth_session_data = $hybridauth->getSessionData();
            store_session_data($hybridauth_session_data);

            // get the user profile
            $user_profile = $adapter->getUserProfile();

authenticate 方法正在抛出异常。在它要求我允许通过应用程序访问之前,现在它会抛出错误。

如果您需要更多信息,请告诉我。
瑞克


以下是发生的事情以及您应该知道的事情:

  • Twitter 跟踪当前时间
  • 如果用于身份验证的 API 请求来自声称其时间超出 Twitter 时间 15 分钟的服务器,它将失败并出现 401 错误。
  • 我是如何解决的:

    我使用 USNO 主时钟将我的服务器时间设置为正确的时间。恰好偏移了 15 分钟多一点。


    这只是我的情况的另一种解决方案:

    在 Twitter App 中设置"回调 URL"(如果你在本地测试,可以使用示例 URL)。

    他们没有将此指定为必填字段,并且允许使用 HybridAuth 请求中的 URL 覆盖此 URL。


    如果其他人也无法编辑他们的服务器时间,有一个解决方法。最基本但可能不是最干净的方法就是转到 Hybrid/thirdparty/OAuth/OAuth.php 找到 generate_timestamp() 函数,并将服务器和 gtm 0 之间的时间差异添加到 time() 中。像这样:

    1
    2
    private static function generate_timestamp() {
    return time() + 7200;

    }

    在我的情况下,我的服务器是 gtm-2,所以我必须在 time() 函数中添加 2 小时(以秒为单位)才能使其工作。