Приложение Django, использующее Twython Oauth, возвращает объект AnonymousUser без атрибута «backend» - PullRequest
2 голосов
/ 30 декабря 2011

Джанго продвинутый новичок здесь. Я бьюсь головой о стену, пытаясь понять это. У меня есть простое веб-приложение, которое использует 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'])

создать объект пользователя с сохраненным секретным токеном.

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Когда вы входите в систему в первый раз, пример кода создает нового пользователя django с username = author_tokens ['screen_name'] и password = authorized_tokens ['oauth_token_secret'].Во второй раз, когда вы входите в систему, значение author_tokens ['oauth_token_secret'] изменяется, поэтому, если вы используете измененный токен для аутентификации, он вернет AnonymousUser, поскольку пароль неправильный.

Чтобы заставить его работать, добавьте следующееСтроки после:

user = User.objects.get(username = authorized_tokens['screen_name'])
user.set_password(authorized_tokens['oauth_token_secret'])
user.save()

Надеюсь, этот ответ ясен.Пожалуйста, не стесняйтесь задавать вопросы

0 голосов
/ 09 января 2012

Я являюсь автором Twython (и соответствующего пакета Twython-Django).

Я уже немного рассмотрел ваш вопрос, и я немного растерялся относительно того, в чем проблемаявляется.Это первое, что я слышал об этом, и я не думаю, что что-то изменилось в последних выпусках Django, что могло бы повлиять на это (я дважды проверил authenticate () и связанное с ним, чтобы быть уверенным ...).

Я с радостью помогу в отладке, хотя - как быстрая проверка работоспособности, вы пытались открыть консоль и вручную запустить функцию authenticate () с образцами данных?В конечном счете, именно это и вызывает проблему с AnonymusUser.Сужение области действия здесь помогло бы, так как проблема не связана с попыткой / исключением - все, что делает, это проверяет, существует ли пользователь в БД, а затем, если нет, создает его.Это не относится к аутентификации вообще.:)

Дайте мне знать, если я могу помочь вам отладить, и не стесняйтесь обращаться ко мне лично, если вам все еще нужна помощь!

...