Django Twitter OAuth-аутентификация - PullRequest
1 голос
/ 17 января 2011

Я пытаюсь реализовать аутентификацию Twitter через OAuth в моем приложении Django, но я застрял в этой ошибке после получения обратного вызова Twitter:

Traceback:

File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response
  100.                     response = callback(request, *callback_args, **callback_kwargs)
File "/Users/flavioramos/projects/sobo/sobo/../sobo/views.py" in twitter_authenticated
  105.     auth_login(request, user)
File "/Library/Python/2.6/site-packages/django/contrib/auth/__init__.py" in login
  71.     user.save()
File "/Library/Python/2.6/site-packages/django/contrib/auth/models.py" in save
  430.         raise NotImplementedError

Exception Type: NotImplementedError at /login/authenticated
Exception Value: 

Мой вид входа в систему / аутентифицированный следующий:

def twitter_authenticated(request):
    token = oauth.Token(request.session['request_token']['oauth_token'],
        request.session['request_token']['oauth_token_secret'])
    client = oauth.Client(consumer, token)

    resp, content = client.request(access_token_url, "GET")
    if resp['status'] != '200':
        print content
        raise Exception("Invalid response from Twitter.")

    access_token = dict(cgi.parse_qsl(content))

    try:
        user = User.objects.get(username=access_token['screen_name'])
    except User.DoesNotExist:
        user = User.objects.create_user(access_token['screen_name'],
            '%s@twitter.com' % access_token['screen_name'],
            access_token['oauth_token_secret'])

        profile = Profile()
        profile.user = user
        profile.oauth_token = access_token['oauth_token']
        profile.oauth_secret = access_token['oauth_token_secret']
        profile.save()


    user = authenticate(username=access_token['screen_name'],password=access_token['oauth_token_secret'])

    auth_login(request, user)

    return HttpResponseRedirect('/')

Этот код взят из примера приложения python-oauth2.

Должен ли я написать свой собственный бэкэнд аутентификации для этого?

Я новичок в Django, и любая помощь будет оценена.

Спасибо,

Ответы [ 2 ]

1 голос
/ 22 марта 2011

У меня была такая же проблема. Кажется, что библиотеки, используемые oauthtwitter, изменились. Для исправления вашей локальной версии сделайте следующее:

в:

/usr/local/lib/python2.6/dist-packages/oauth_python_twitter-1.0-py2.6.egg/oauthtwitter.py

найдите строку 37 и измените ее на:

Api.__init__(self, access_token.key, access_token.secret)

до:

Api.__init__(self, consumer_key, consumer_secret, access_token.key, access_token.secret)

Теперь все обязательные переменные передаются правильно.

0 голосов
/ 11 февраля 2011

Не совсем уверен, но я думаю

* auth_login (запрос, пользователь) *

Должно быть: логин (запрос, пользователь)

(и, конечно, этот логин должен быть импортирован из django.contib.auth поверх вашего логина / аутентифицированного представления)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...