[PYTHON] Ich habe Probleme mit der Twitter-Authentifizierung von Django

2020-02-02 Update
Ich habe den nächsten Parameter zum Linkziel der Schaltfläche "Mit Twitter anmelden" hinzugefügt.

Vorwort

Verwenden Sie social-auth-app-django

Ich erstelle eine Web-App mit Django und habe beschlossen, mich über die Twitter-Authentifizierung anzumelden. Ich habe gehört, dass es einfach sein würde, social-auth-app-django zu verwenden, also habe ich beschlossen, es zu verwenden.

Es gibt eine offizielle Dokumentation zur Verwendung von social-auth-app-django mit dem Namen Python Social Auths Dokumentation. Es gibt mehrere andere einfache Möglichkeiten, um mit dem Durchsuchen des Netzes zu beginnen (z. B. this).

Worum es in diesem Artikel geht

Obwohl die Installation von social-auth-app-django sehr einfach ist, hatte ich dennoch einige Probleme bei der Einführung. Daher werde ich in diesem Artikel über die Teile schreiben, mit denen ich Probleme hatte.

Überprüfen Sie vorher den gesamten Vorgang

Ich denke, es ist schwer zu verstehen, wenn ich über den Teil spreche, mit dem ich abrupt beunruhigt war, deshalb werde ich das Einführungsverfahren kurz überprüfen. Ich werde nicht im Detail erklären. Wenn Sie es wissen, überspringen Sie es bitte.

1. Erstellen Sie eine App für den API-Zugriff auf Twitter

Es wird davon ausgegangen, dass Sie als Entwickler auf Twitter registriert sind. Um eine App zu erstellen, klicken Sie einfach im Dashboard (https://developer.twitter.com/en/apps) auf "App erstellen" und geben Sie die erforderlichen Informationen ein.

In meinem Fall hatte ich das Problem, dass ich keine Twitter-App erstellen konnte. Rückruf-URLs sind ebenfalls nicht erforderlich, müssen jedoch korrekt eingestellt sein, damit die App zur Authentifizierung verwendet werden kann. Details werden in [** "Besorgter Ort" **](# Besorgter Ort) unten erklärt.

Angenommen, Sie haben eine Twitter-App und die Rückruf-URLs sind korrekt eingestellt, fahren Sie mit dem nächsten Schritt fort.

2. Modulinstallation

Es kann von PyPI mit pip oder pipenv installiert werden.

$ pip install social-auth-app-django

3. API-Schlüssel und geheimer API-Schlüssel

Sie benötigen Ihren API-Schlüssel und Ihren geheimen API-Schlüssel, um auf die Twitter-API zugreifen zu können. Um dies zu überprüfen, gehen Sie zu den Details der App, die Sie über das Dashboard erstellt haben (https://developer.twitter.com/en/apps), und wählen Sie die Registerkarte Schlüssel und Token aus. Kopieren Sie die beiden Schlüssel der angezeigten Consumer-API-Schlüssel und verwenden Sie sie.

Sie sollten diese Schlüssel nicht verfügbar machen, aber Sie können sie für die Entwicklung direkt in settings.py schreiben.

settings.py


SOCIAL_AUTH_TWITTER_KEY = 'XXXXXXXXXXXXXXX'
SOCIAL_AUTH_TWITTER_SECRET = 'YYYYYYYYYYYYYY'

Wenn das Projekt veröffentlicht wird, sollte es nicht in das Repository aufgenommen werden, damit es lokal und anderswo gelesen werden kann. Sie sollten dasselbe mit der Variablen "SECRET_KEY" tun, damit dies in Ordnung ist.

4. Bearbeiten Sie settings.py

Fügen Sie 'Social_django' zu INSTALLED_APPS hinzu.

settings.py


INSTALLED_APPS = [
    ...
    'social_django',    #hinzufügen
]

Fügen Sie context_processors zu TEMPLATES hinzu.

settings.py


TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                'social_django.context_processors.backends',        #hinzufügen
                'social_django.context_processors.login_redirect',  #hinzufügen
            ],
        },
    },
]

Namensraum und Backends hinzufügen.

settings.py


# For social-auth-app-django
SOCIAL_AUTH_URL_NAMESPACE = 'social'                #hinzufügen
AUTHENTICATION_BACKENDS = [
    'social_core.backends.twitter.TwitterOAuth',    #hinzufügen
    'django.contrib.auth.backends.ModelBackend',    #hinzufügen
]

5. Bearbeiten Sie urls.py

Fügen Sie 'social_django.urls' in 'urlspatterns' ein.

urls.py


urlpatterns = [
    ...
    path('', include('social_django.urls')),        #hinzufügen
    path('admin/', admin.site.urls),
    ...
]

Auf diese Weise können Sie auf Anfragen "/ login / twitter /", "/ complete / twitter /", "/ connect / twitter /" antworten.

Das Dokument hat übrigens den folgenden (alten) Schreibstil.

    url('', include('social_django.urls', namespace='social')),
  1. migrate

Migrieren und aktualisieren Sie die Datenbank nach dem bisherigen Einrichten. Es wird eine Tabelle hinzugefügt, die Ihr Twitter-Konto mit Ihrem Django-Konto verknüpft.

$ python manage.py makemigrations social_django
$ python manage.py migrate

7. Erstellen Sie eine Anmeldeseite

Als ich mir den Artikel ansah, in dem die Verwendung von Social-Auth-App-Jango im Internet vorgestellt wurde, gab es eine Seite, auf der die Anmeldeseite von Grund auf neu erstellt wurde, und eine Seite, auf der nur erklärt wurde, wie die Anmeldeschaltfläche geschrieben wird.

Ich war ein wenig besorgt darüber, was ich tun sollte, deshalb werde ich es unten erklären.

Übrigens ist das Schreiben einer Schaltfläche so.

<button type="button" class="button"
    onclick="location.href='{% url 'social:begin' 'twitter' %}?next={{ next }}'">
Loggen Sie sich mit Twitter ein
</button>

Wenn Sie dies installieren, können Sie sich bei Twitter authentifizieren.

Wo ich mir Sorgen machte

Ich werde in den obigen Schritten erklären, womit ich Probleme hatte.

Ich kann keine Twitter-App erstellen

Möglicherweise haben diejenigen, die sich kürzlich als Twitter-Entwickler registriert haben, dieses Problem nicht. Ich war lange Zeit Entwickler und als ich versuchte, eine App für Django zu erstellen, wurde mir gesagt, ich solle mich erneut als Entwickler bewerben.

Als ich mich wie angewiesen bewarb, wurde die folgende Seite angezeigt.

Ich dachte, dass ich in der Lage sein sollte, einen Antrag damit zu stellen, aber nachdem ich die erforderlichen Punkte ausgefüllt und die Notizen gelesen hatte, dachte ich, dass dies das Ende war und dieser Bildschirm angezeigt wurde.

Ursache

Ich konnte es unter Bezugnahme auf diese Seite lösen.

In meinem Fall konnte ich nach dem Festlegen der Telefonnummer in meinem Twitter-Konto eine App erstellen. Ich wusste zunächst nicht, wo ich die Telefonnummer einstellen sollte, also schrieb ich sie auf. Anstelle des Entwickler-Dashboards konnte ich sie normalerweise auf der Twitter-Homepage unter "Einstellungen & Datenschutz"> "Konten" festlegen.

Callback URLs

Als ich die Schaltfläche "Mit Twitter anmelden" installierte und den Vorgang zum ersten Mal überprüfte, wurde ein 403-Fehler angezeigt. Die Ursache war das Festlegen von Rückruf-URLs auf der Seite der Twitter-App.

Es wurde korrekt in der dieser Seite geschrieben, auf die ich in der Einleitung Bezug genommen habe, aber zuerst habe ich mir andere Seiten angesehen Rückruf-URLs waren falsch. Es hängt von den Einstellungen ab, daher ist es eine gute Idee, urls.py in Ihrer Umgebung zu überprüfen.

Wenn Sie es mit den oben in diesem Artikel beschriebenen Schritten einrichten, ist es richtig, die folgende URL festzulegen:

Was tun mit der Anmeldeseite?

Auf der ersten Seite, auf die ich verwiesen habe, habe ich eine Anmelde- / Abmeldeseite von Grund auf neu erstellt und auch eine App dafür erstellt (App im Django-Projekt). Ich fragte mich, ob ich das tun musste, aber es war nicht so. Fügen Sie einfach die Schaltfläche, die Sie in ** "7. Erstellen Sie eine Anmeldeseite" ** oben in die vorhandene Anmeldeseite ein.

Wenn Sie eine spezielle Seite erstellen möchten, um sich mit der Twitter-Authentifizierung anzumelden, können Sie dies natürlich tun. Da mein Projekt keine Anmeldefunktion hat, habe ich mich nur mit Twitter-Authentifizierung angemeldet und das Originalformular aus der Anmeldeseitenvorlage gelöscht (auskommentiert).

Umschreiben von Vorlagen

Die meisten Vorlagen für Anmelde- / Abmeldeseiten befinden sich im Ordner "Vorlagen / Registrierung /". Tatsächlich hängt es vom Projekt ab. Suchen Sie also die in diesem Projekt verwendete Vorlage und bearbeiten Sie sie.

So habe ich das ursprüngliche Formular durch einen einzigen Knopf ersetzt.

login.html


    ...
    <div align="center">
        <button type="button" class="button"
        onclick="location.href='{% url 'social:begin' 'twitter' %}?next={{ next }}'">
Loggen Sie sich mit Twitter ein</button>
    </div>
    
    <!--
    <div align="center">
        <form method="post" action="{% url 'login' %}">
            {% csrf_token %}
            <table>
                {{ form.as_table }}
            </table>
            <div>&nbsp;</div>
            <input type="submit" class="button" value="Login"/>
            <input type="hidden" name="next" value="{{ next }}"/>
        </form>
    </div>
    -->
    ...

Angezeigte Anmeldeseite Wenn Sie das Originalformular nicht auskommentieren, können Sie mit der Schaltfläche "Mit Twitter anmelden" koexistieren. Die Abmeldeseite muss nicht geändert werden.

So melden Sie sich als Administrator an

Im obigen Beispiel können Sie sich nicht mit einem Kennwort anmelden. Wenn Sie sich jedoch als Administrator anmelden möchten, können Sie auf den Dienststamm / admin / 'zugreifen, um die Anmeldeseite für den Administrator zu öffnen.

Da ich jedoch normalerweise dieselbe Abmeldeseite verwende, denke ich, dass ich, selbst wenn ich mich als Administrator abmelde und auf den Link "Erneut anmelden" klicke, zu "Mit Twitter anmelden" gehe. Ich lasse es so wie es ist, weil die Admin-Seite schwer zugänglich sein sollte.

Recommended Posts

Ich habe Probleme mit der Twitter-Authentifizierung von Django
Ich habe Probleme mit der Vererbung von Instanzvariablen in Python
Haben Sie Probleme mit "pipenv.exceptions.ResolutionFailure"?
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API