Melden Sie sich bei Django mit Ihrem Google-Konto anstelle Ihres eigenen an. Ich habe es überhaupt nicht verstanden, als ich ReadMe des zu verwendenden Moduls gelesen habe. Machen Sie sich also eine Notiz.
Die Version ist die, die ich verwendet habe.
Es wird davon ausgegangen, dass "python manage.py runserver" betriebsbereit ist. Stellen Sie außerdem sicher, dass die Google App bereits erstellt wurde und Sie über eine ID und einen geheimen Schlüssel verfügen.
Installieren Sie zuerst python-social-auth
pip install python-social-auth
Schreiben Sie dann die Einstellungen in settings.py
und urls.py.
Fügen Sie Folgendes zu project / settings.py
hinzu
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
)
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'social.backends.google.GoogleOAuth2',
'social.backends.twitter.TwitterOAuth',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'your secret id'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'your secret key'
project_name/urls.py
urlpatterns = patterns('',
...
url('', include('social.apps.django_app.urls', namespace='social')),
url('', include('django.contrib.auth.urls', namespace='auth')),
...
)
Als nächstes bearbeiten wir die Vorlage. Dieses Mal ersetzen wir die Anmeldung / Benutzerregistrierung auf dem Verwaltungsbildschirm durch die Google-Authentifizierung.
Erstellen Sie zunächst einen Anmeldebildschirm für den Verwaltungsbildschirm und überschreiben Sie ihn mit dem vorhandenen.
Erstellen Sie "templates / admin / login.html" und wählen Sie [diese Datei] aus (https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/login.html). Bitte kopieren und einfügen. Schreiben Sie den Inhaltsblock in der kopierten Datei neu. (Ursprünglich scheint es login.html nicht ganz, sondern teilweise zu überschreiben, aber ich weiß es nicht, also überschreibe ich das Ganze ...)
{% block content %}
<center>
{% if user and not user.is_anonymous %}
<h1><a href="{% url 'auth:logout' %}?next={{ request.path }}">Logout</a></h1>
{% else %}
<h1><a href="{% url 'social:begin' 'google-oauth2' %}?next={% url 'admin:index' %}">Login with Google</a></h1>
{% endif %}
</center>
{% endblock %}
Das ist alles für das Verfahren. Lassen Sie es uns tatsächlich ausführen und überprüfen. Unten finden Sie eine Liste von Punkten, die leicht zu stolpern sind.
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
Das ist es. Da ich es nach dem Erstellen geschrieben habe, kann es zu Auslassungen kommen. Ich würde mich freuen, wenn Sie mich wissen lassen könnten, wenn Sie etwas bemerken.
Fügen Sie der Datei settings.py Folgendes hinzu, und es ist in Ordnung
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_EMAILS = ['email address']
Fügen Sie Folgendes hinzu, wenn Sie mit der Domain der E-Mail-Adresse anstelle der E-Mail-Adresse validieren möchten
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS = ['domain']
Es ist schwierig, sich sozial beim Administrator anzumelden und nichts zu sehen. Deshalb wollte ich von Anfang an is_staff und is_superuser aktivieren, also werde ich der Pipeline meine eigene Funktion hinzufügen. Dieses Mal werden wir is_staff und is_superuser des erstellten Benutzers neu schreiben.
project_name/custome_pipeline.py
def set_superuser(user, *args, **kwargs):
user.is_staff = True
user.is_superuser = True
user.save()
Fügen Sie danach Folgendes zu settings.py hinzu. Der Punkt ist, den erstellten Prozess nach create_user einzufügen
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'social.pipeline.user.create_user',
'project_name.custom_pipeline.set_superuser', #Pfad zur vorbereiteten Funktion
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details'
)
Recommended Posts