Django 高级初学者在这里。我正用头撞墙,试图弄清楚这一点。我有一个简单的 web 应用程序,它使用绑定到 contrib.auth 的twython_django_oauth来注册和登录用户。(我使用的是开箱即用的twython,没有进行任何修改。)我可以毫无问题地通过 Twitter 注册新用户,这会将他们作为登录用户返回到应用程序。但是,随后尝试登录用户会返回此错误:
Traceback:
File "/app/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/app/thislist/twython_django_oauth/views.py" in thanks
80. login(request, user)
File "/app/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in login
82. request.session[BACKEND_SESSION_KEY] = user.backend
Exception Type: AttributeError at /thanks
Exception Value: 'AnonymousUser' object has no attribute 'backend'
我注意到的一个异常情况是,在遇到此问题的注册用户的 Twitter 帐户中,webapp 两次显示为已授权。顺便说一句,这一切似乎在几周前都运行良好。我有两个注册的 Twitter 用户可以毫无问题地登录。在这些帐户中,该应用似乎只被授权一次。但是,我似乎无法将应用程序回拨到这些用户注册时以找出我所做的可能导致问题的更改。如果有人对此处的工作流程为何返回 AnonymousUser 有任何见解,尽管用户似乎已使用适当的凭据进行了注册,我将不胜感激!
更新:我已经确定了问题的原因。每次用户在成功输入其 Twitter 凭据后被重定向回应用程序时,twython_django 都会尝试使用新的“oauth_token_secret”登录他/她,而不是获取在注册期间生成并存储在 webapp 的 Twitter 个人资料数据库中的秘密令牌。结果,django 无法对用户进行身份验证。所以问题是:为什么不这样
try:
user = User.objects.get(username = authorized_tokens['screen_name'])
使用存储的秘密令牌生成用户对象。