代码之家  ›  专栏  ›  技术社区  ›  Homunculus Reticulli

代码:未知,错误:从“api.twitter.com”获取请求令牌时响应无效-如何获取和打印twitter错误消息

  •  2
  • Homunculus Reticulli  · 技术社区  · 6 年前

    我正在使用 Django Allauth 带Django 2.0.8和3.5

    我已经遵循了使用Twitter登录一个站点的说明。但是,当我尝试登录到我的网站时,我收到以下消息:

    社交网络登录失败

    尝试通过社交网络帐户登录时出错。

    没有包含更多信息的日志输出-这使得调试变得不必要的困难。基于这个答案 question ,我已经在我的模板中添加了一些信息,这些信息可以让我更加轻松:

    代码:认证错误。代码,错误:认证错误。异常

    但是,错误消息是:

    代码:未知,错误:从“api.twitter.com”获取请求令牌时响应无效

    这没什么帮助。我希望看到twitter.api返回的实际响应,这样我就可以了解问题的根本所在——但是,如何输出或记录 实际 从Twitter API获得的响应。

    当我尝试使用Django Allauth登录时,如何查看/捕获Twitter API响应?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Arghya Saha    6 年前

    检查Django Allauth代码,我可以找到逻辑,它给出了以下错误。 Error Code

            if response.status_code not in [200, 201]:
                raise OAuthError(
                    _('Invalid response while obtaining request token'
                      ' from "%s".') % get_token_prefix(
                          self.request_token_url))
    

    这表明,如果响应代码不成功,即200或201,则会引发此异常。因此,您可以看到它在不记录响应的情况下引发了一个错误。

    可能还有其他方法来记录响应,但这需要库的维护人员或开发整个库的人员的帮助。

    现在来回答您的问题,您如何记录此响应。我看到的最简单的方法是编辑本地文件 socialaccount/providers/oauth/client.py 在服务器中放置一个记录器。新文件 socialAccount/providers/oauth/client.py 看起来像这样:

    import logging
    LOG_FILENAME = "django_allauth_response.log"
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)
    handler = RotatingFileHandler(LOG_FILENAME, maxBytes=20000000, backupCount=2)
    formatter = logging.Formatter('%(levelname)s: %(asctime)s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    ......... 
    .........
    same code as in allauth/socialaccount/providers/oauth/client.py
    .........
    
    logger.info("Response of authentication:" + str(response)) #add this line
    if response.status_code not in [200, 201]:
        raise OAuthError(
            _('Invalid response while obtaining request token'
              ' from "%s".') % get_token_prefix(
                  self.request_token_url))
    

    之后,一旦在服务器中运行它,就可以打开 django_allauth_response.log 归档并检查响应。

    附笔。 设置日志程序可能需要一些小的调整,而且大多数情况下,您需要对响应的字符串转换进行更多的工作。

        2
  •  0
  •   Johnny Wales    6 年前

    我在Twitter上遇到过两次这个问题,两次都是回调URL。有一次我没有把尾随/放在末尾。下一次,我使用的是一个回调URL,在开始时使用了www.,但从另一个子域访问该站点。

    另外,我按照之前的海报建议做了,并在Allauth中修改了文件client.py,但是我发现我可以通过

                raise OAuthError(
                    _('Invalid response while obtaining request token'
                      ' from "%s". (' + str(response.status_code) + ') and (' + str(response.text) + ')') 
                        % get_token_prefix(
                          self.request_token_url))