Próbuję użyć pakietu Django Social Auth do połączenia się z Twitterem, ale mam problem ze zrozumieniem, jak to zrobić, ponieważ nie mogę znaleźć żadnych przykładów. Zakładam, że najlepszym pakietem do tego celu jest Django Social Auth
.Jak mogę używać Django Social Auth do łączenia się z Twitterem?
Szukałem na kilka przykładów, które korzystają z Facebooka, a od tego dodałem następujące do mojego settings.py
pliku:
AUTHENTICATION_BACKENDS = (
'social_auth.backends.twitter.TwitterBackend',
'django.contrib.auth.backends.ModelBackend',
)
# overwriting default templates
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.static',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.contrib.messages.context_processors.messages',
'social_auth.context_processors.social_auth_by_type_backends',
'django.contrib.auth.context_processors.auth',
)
SOCIAL_AUTH_ENABLED_BACKENDS = ('twitter')
SOCIAL_AUTH_DEFAULT_USERNAME = 'new_social_auth_user'
# Social media login info:
TWITTER_CONSUMER_KEY = 'xxx'
TWITTER_CONSUMER_SECRET = 'xxxxxx'
# 'magic' settings
SOCIAL_AUTH_COMPLETE_URL_NAME = 'socialauth_complete'
SOCIAL_AUTH_ASSOCIATE_URL_NAME = 'associate_complete'
SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'social_auth.backends.pipeline.associate.associate_by_email',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form',
'social.pipeline.username',
'social_auth.backends.pipeline.user.create_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details',
'social_auth.backends.pipeline.misc.save_status_to_session',
'social.pipeline.redirect_to_form2',
'social.pipeline.first_name',
)
SOCIAL_AUTH_FORCE_POST_DISCONNECT = True
SOCIAL_AUTH_SESSION_EXPIRATION = False
W urls.py
Dodałem następujące linie:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
a w pliku o nazwie twitter.py
Dodałem następujące czynności, aby utworzyć widok:
from django.contrib.auth import BACKEND_SESSION_KEY
from django.contrib.auth.models import AnonymousUser
from django.http import HttpResponse
from django.http import HttpResponseRedirect #dq
from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.views.decorators.csrf import csrf_exempt
from django.core.cache import cache
from social_auth.models import UserSocialAuth
from social_auth.views import complete as social_complete
from social_auth.utils import setting
from social_auth.backends.twitter import TwitterBackend
# twitter login
def twitter_app(request):
"""twitter login"""
if request.user.is_authenticated():
return HttpResponseRedirect('done')
else:
return render_to_response('twitter.html', {'twitter_app_id':setting('TWITTER_CONSUMER_KEY'),
'warning': request.method == 'GET'}, RequestContext(request))
Mam następnie utworzony plik szablonu o nazwie twitter.html
o następującej strukturze:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
Skutkuje to następującym komunikatem o błędzie:
Strona internetowa pod adresem http://example.com/twitter/done spowodowała zbyt wiele przekierowań .
Jestem trochę zagubiony co do tego, co powinienem robić ogólnie. Stworzyłem aplikację na Twitterze z adresem mojej strony, by wygenerować klucz APi/Secret. Wszelkie rady dotyczące tego, w jakim kierunku powinienem podążać, lub linki do przykładów roboczych będą bardzo mile widziane.
URL, aby rozpocząć uwierzytelnianie twitter powinno być '{% url socialauth_begin "twitter" %}' nie ' 'twitter_app''. Ta nazwa reprezentuje backend, z którego zamierzasz korzystać.Powinieneś również dołączyć 'urls.py' w DSA do swoich głównych adresów URL z taką zasadą:' ('', include ('social_auth.urls')) '. To ustawienie "SOCIAL_AUTH_ENABLED_BACKENDS" już nie istnieje. – omab
Dzięki @omab Wprowadziłem te zmiany, a kiedy kliknę na "mysite.com/twitter", to po prostu zabieram mnie na stronę, tak jakbym był zalogowany (mimo że nie musiałem nic robić). – djq
spróbuj utworzyć/twitter/done/page – catherine