Ich versuche, das Django Social Auth Paket zu verwenden, um mit Twitter zu verbinden, aber ich habe Schwierigkeiten zu verstehen, wie genau dies zu tun ist, wie ich keine Beispiele finden kann. Ich gehe davon aus, dass Django Social Auth
das beste Paket für diesen Zweck ist.Wie kann ich mit Django Social Auth eine Verbindung zu Twitter herstellen?
Ich habe ein paar Beispiele gesucht, die Facebook nutzen, und daraus die folgenden meiner settings.py
Datei hinzugefügt haben:
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
In urls.py
habe ich hinzugefügt die folgenden Zeilen:
url('', include('social_auth.urls')),
url(r'^twitter/', twitter_app, name='twitter_app')
Und in einer Datei namens twitter.py
ich habe die eine Ansicht erstellen wie folgt ergänzt:
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))
Ich habe erstellt dann eine Vorlagendatei twitter.html
mit der folgenden Struktur genannt:
{% extends "base.html" %}
{% block script %}
Login with <a href="{% url socialauth_begin 'twitter' %}">Twitter</a>
{% endblock %}
Daraus ergibt sich die folgende Fehlermeldung:
Die Webseite unter http://example.com/twitter/done in zu viele Umleitungen geführt hat.
Ich bin ein wenig verloren, was ich insgesamt tun sollte. Ich habe eine App auf Twitter mit meiner Website-URL erstellt, um den api/geheimen Schlüssel zu generieren. Irgendwelche Ratschläge, in welche Richtung ich gehen sollte, oder Links zu Arbeitsbeispielen würden sehr geschätzt werden.
Die URL sollte die Twitter-Authentifizierung, um zu starten '{% url socialauth_begin "twitter" %}', nicht ' 'twitter_app''. Dieser Name repräsentiert das Backend, das Sie verwenden möchten.Außerdem sollten Sie DSA 'urls.py' in Ihre Haupt-URLs mit einer Regel wie der folgenden einschließen:' ('', include ('social_auth.urls')) '. Diese Einstellung 'SOCIAL_AUTH_ENABLED_BACKENDS' existiert nicht mehr. – omab
Danke @omab Ich habe diese Änderungen vorgenommen, und wenn ich auf "mysite.com/twitter" klicke, bin ich auf einer Seite, als wäre ich eingeloggt (obwohl ich nichts tun musste). – djq
versuche,/twitter/done/page – catherine