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



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

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

社交网络登录失败

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

没有包含更多信息的日志输出 - 这使得调试变得不必要地困难。基于对这个问题的回答,我在我的诱惑中添加了信息,这些信息提供了更多的启示:

代码: {{ auth_error.code }}

, 错误: {{ auth_error.exception }}

但是,错误消息是:

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

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

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

我在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))

检查 django-allauth 代码,我可以找到给出以下错误的逻辑。错误代码

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

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

相关内容

最新更新