我正在使用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
文件并检查响应。
附言设置记录器可能需要一些小的调整,而且大多数情况下,您必须在响应的字符串转换上做更多工作。