我在Django 2.0.8和3.5中使用Django Allauth
我已按照使用Twitter登录网站的说明进行操作。但是,当我尝试登录我的网站时,出现以下消息:
社交网络登录失败
尝试通过您的社交网络帐户登录时发生错误。
没有包含更多信息的日志输出-这使得调试变得不必要地困难。基于对此question的回答,我向自己的模板中添加了一些信息,从而使我们更加了解:
代码:{{auth_error.code}},错误:{{auth_error.exception}}
但是,错误消息是:
代码:未知,错误:从“ api.twitter.com”获取请求令牌时响应无效
没有什么帮助。我想查看twitter.api返回的实际响应,因此可以深入探究问题-但是,对于我来说,如何输出或记录从中获得的 ACTUAL 响应并不清楚twitter API。
当我尝试使用django-allauth登录时,如何查看/捕获Twitter API响应?
答案 0 :(得分:0)
检查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。。设置记录器可能需要进行一些细微调整,而且大多数情况下,您还需要在响应的字符串转换上做更多的工作。
答案 1 :(得分:0)
我在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))