Джанго продвинутый новичок здесь. Я бьюсь головой о стену, пытаясь понять это. У меня есть простое веб-приложение, которое использует twython_django_oauth , привязанное к contrib.auth, для регистрации и входа в систему пользователей. (Я использую 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 зарегистрированных пользователей, которые сталкиваются с этой проблемой, веб-приложение отображается как авторизованное дважды. Кстати, все это, казалось, работало нормально несколько недель назад. У меня есть два зарегистрированных пользователя Twitter, которые могут войти без проблем. В этих учетных записях приложение представляется авторизованным только один раз. Тем не менее, я не могу дозвониться до того момента, когда эти пользователи зарегистрировались, чтобы выяснить, какие изменения, которые я внес, могли вызвать проблему. Если у кого-то есть понимание того, почему рабочий процесс здесь возвращает AnonymousUser, несмотря на то, что пользователь, похоже, зарегистрирован с соответствующими учетными данными, я был бы признателен от вас!
Обновление: Я выяснил причину проблемы. Каждый раз, когда пользователь перенаправляется обратно в приложение после успешного ввода своих учетных данных Twitter, twython_django пытается зарегистрировать его / ее, используя новый «oauth_token_secret», вместо того, чтобы захватить секретный токен, сгенерированный во время регистрации и сохраненный в базе данных профиля Twitter веб-приложения. В результате django не может аутентифицировать пользователя. Итак, вопрос: почему это не
try:
user = User.objects.get(username = authorized_tokens['screen_name'])
создать объект пользователя с сохраненным секретным токеном.