【问题标题】:Code: unknown, Error: Invalid response while obtaining request token from "api.twitter.com" - how to obtain and print Twitter error message代码:未知,错误:从“api.twitter.com”获取请求令牌时响应无效 - 如何获取和打印 Twitter 错误消息
【发布时间】:2019-01-27 02:24:48
【问题描述】:

我在 Django 2.0.8 和 3.5 中使用 Django Allauth

我已按照使用 Twitter 登录网站的说明进行操作。但是,当我尝试登录我的网站时,我收到以下消息:

社交网络登录失败

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

没有包含更多信息的日志输出 - 这使得调试变得不必要地困难。基于对此question 的回答,我在我的模板中添加了一些信息,这让我有了更多的了解:

代码:{{ auth_error.code }},错误:{{ auth_error.exception }}

但是,错误信息是:

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

这没有多大帮助。我想查看 twitter.api 返回的实际响应,以便深入了解问题 - 但是,我不清楚如何输出或记录从获得的 ACTUAL 响应推特 API。

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

【问题讨论】:

  • 我的解决方案是否帮助您解决了问题?
  • @argo,谢谢我刚刚看到这条消息通知。晚上回家后我会检查并通知您。

标签: django twitter django-allauth


【解决方案1】:

检查 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 文件并检查响应。

P.S. 设置记录器可能需要一些小的调整,而且大多数情况下您需要在响应的字符串转换上做更多的工作。

【讨论】:

    【解决方案2】:

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

    另外,我按照上一张海报的建议做了并修改了 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))
    

    【讨论】:

    • 嗨,约翰尼!还记得我吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多