it-swarm.com.de

Django "Remember Me" mit integrierter Anmeldeansicht und Authentifizierungsformular

Wie kann ich das ursprüngliche Admin-Login () und AuthenticationForm wiederverwenden, um eine längere Cookie-Länge für Benutzer festzulegen, bei denen die Option "Remember me" auf der Anmeldeseite aktiviert ist? Ich verwende derzeit das integrierte Login über urls.py

url(r'^login/$','Django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'),

Das Kontrollkästchen ist in meinem login.html implementiert als:

<label><input name="remember_me" type="checkbox">Keep me logged in</label>

ich bin mir jedoch nicht sicher, wie ich diese Informationen über AuthenticationForm an Django.contrib.auth.views.login weitergeben kann

Wenn der Benutzer das Kontrollkästchen "Remember me" aktiviert, wird das Cookie-Alter in "settings.py" definiert

SESSION_COOKIE_AGE = 360

Ich habe ein paar ähnliche Fragen gefunden, aber ich denke nicht, dass eine separate App installiert werden muss. Das unten abgebildete Snippet ( http://djangosnippets.org/snippets/1881/ ) schien vielversprechend zu sein, aber ich habe Python und Django nur für ein paar Monate programmiert und konnte es nicht zum Laufen bringen:

def login(request, *args, **kwargs):
    if request.method == 'POST':
        if not request.POST.get('remember_me', None):
            request.session.set_expiry(0)
    return auth_views.login(request, *args, **kwargs)
33
Sawwy

Das Alter des Django-Session-Cookies wird in Sekunden definiert.

SESSION_COOKIE_AGE = 360

bedeutet, dass die Sitzung nach 6 Minuten abläuft. Ich habe kürzlich die Funktion "Remember Me" implementiert und folgende Einstellungen vorgenommen:

SESSION_COOKIE_AGE = 60 * 60 * 24 * 30 # One month

Die Anmeldeansicht muss überschrieben werden, wie im Snippet gezeigt.

Es klingt jedoch so, als hätten Sie ein seltsames Problem. Wenn Sie den Browser schließen (wenn die Option "Nicht speichern" markiert ist), muss der Benutzer sich nicht erneut anmelden. Dies sollte nicht geschehen, wenn Sie set_expiry (0) verwenden. Wenn Sie set_expiry (0) verwenden, setzt Django im Gegensatz zu Cookies mit fester Länge ein Cookie für die "Sitzungslänge", das nach dem Schließen des Browsers abläuft.

Es gibt andere Einstellungen, die das Löschen des Cookies beim Schließen des Browsers beeinflussen. Möglicherweise können Sie versuchen, den Wert der Einstellung SESSION_EXPIRE_AT_BROWSER_CLOSE zu ändern oder den vorhandenen Wert in Ihrer Konfiguration zu überprüfen. https://docs.djangoproject.com/de/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

16
tarequeh

Das request.set_expiry (O) loggt sich also nur in einem anonymen, aber autorisierten Benutzer ein

if request.user.is_authenticated() and request.user.id is not None: return redirect('home')

0