Django Einbau-Login Ansicht und Fehler
-
29-09-2019 - |
Frage
Ich verwende die django.contrib.auth.views.login and
.logout
Ansichten. Sehr praktisch, die Box ausgearbeitet, würde einsetzen wieder AAA + usw.
Das Problem entsteht, da ich keine separate Login-Seite verwenden, sondern habe ich ein Login-Feld auf jeder Seite (es sei denn, der Benutzer angemeldet ist, natürlich). Und so, wenn der Benutzername / Passwort-Kombination falsch ist, ich einen Fehler. Welche dieser drei Wege soll ich wählen?
- Es gibt einen geheimen Weg zum nächsten nicht nur auf Erfolg zu umleiten, sondern auch auf Fehler. Wenn ja, bitte sagen Sie mir!
- Ich schreibe meine eigene Login-Ansicht, Putting Djangos Nachrichtensystem in der Zwischenzeit verwenden
- Ich schreibe eine Login-Seite (na ja, es ist nur eine Vorlage fehlt), damit ich die volle awesomeness des Auth-Systems Django ausnutzen kann.
Lösung
Eine der möglichen Lösungen (erste + dritte Wahl in der Liste):
- Sie haben spezielle Anmeldeseite zur Verfügung zu stellen (das heißt definieren
registration/login.html
) und für nicht loged in Benutzer jede normale Seite hat Login-Formular; - Wenn Benutzeranmeldungen normalerweise (diese Logik in
django.contrib.auth.views.login
behandelt werden):- für normale Seite: Umleitung Benutzer auf die Seite, von wo aus sie loged in;
- für Login-Seite: Wenn es
next
param ist, leitet es, sonst Umleitung zur Hauptseite;
- , wenn der Benutzer nicht auf Login: Umleitung (oder neu zu zeichnen) Login-Seite mit Fehlern versehen ist;
- , wenn Benutzer loged in:. Normaler Seite einen Link zu logout bietet (Spezialseite gibt es noch den Fall, wenn der Benutzer will ein anderes Konto neu anmelden oder einloggen durch)
Im normalen Seiten, Login-Formular so etwas wie diese <input type="hidden" name="next" value="{{ request.path }}" />
haben sollte.
Projekteinstellungen:
# in settings.py
LOGIN_URL = '/login' # this should coinside with url pattern of login view
LOGOUT_URL = '/logout' # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page
N. B .: I Djangos buildin Abmelde Ansicht nicht statt verwende ich meine eigene benutzen fast das gleiche, aber tut logout nur für POST-Anfragen. Diese Verbietet Benutzer abzumelden von <img src='my_site/logout' />
bösartigem Code.