Django "Remember Me" avec vue de connexion et formulaire d'authentification intégré

Comment puis-je réutiliser le login administrateur() et le formulaire D'authentification pour définir une longueur de cookie plus longue pour les utilisateurs avec l'option "Se souvenir de moi" cochée à la page de connexion? J'utilise actuellement le login intégré via urls.py

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

la case à cocher est implémentée dans mon login.html:

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

mais je ne suis pas sûr de savoir comment transmettre cette information par le biais du formulaire D'authentification au django.contrib.auth.vue.login

actuellement, si l'utilisateur se connecte "remember me" boîte non contrôlée, l'âge des cookies est défini dans settings.py

SESSION_COOKIE_AGE = 360

j'ai trouvé quelques questions similaires mais je ne pense pas que cela devrait exiger une application séparée pour être installé. L'extrait ci-dessous (http://djangosnippets.org/snippets/1881/) semblait prometteur mais je n'ai codé python et Django que depuis quelques mois et je n'ai pas pu le faire fonctionner:

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
demandé sur okm 2013-02-27 02:13:40

2 réponses

l'âge des cookies de la session django est défini dans secondes.

SESSION_COOKIE_AGE = 360

signifie que la session expirera au bout de 6 minutes. J'ai récemment mis en œuvre la fonctionnalité "Remember Me" Et j'ai mis ce qui suit:

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

la vue de connexion doit être désactivée comme vous l'avez montré dans le snippet.

mais on dirait que vous avez un problème étrange où fermer le navigateur (quand me rappeler n'est pas vérifié) ne nécessite pas l'utilisateur de se reconnecter qui ne devrait pas arrive si vous utilisez set_expiry (0). Lorsque vous utilisez set_expiry (0), le django définit un cookie de longueur "session" par opposition à un cookie de longueur fixe et, de par sa conception, il expirerait après la fermeture du navigateur.

il y a un autre paramètre qui affecte la suppression des cookies sur la fermeture du navigateur. Vous pouvez peut-être essayer de modifier la valeur du paramètre SESSION_EXPIRE_AT_BROWSER_CLOSE ou vérifier qu'elle existe dans votre configuration. https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

16
répondu tarequeh 2016-08-26 11:18:34

donc la requête.set_expiry (O) ne se connecte qu'à un utilisateur anonyme mais autorisé.. si j'étais vous,je voudrais faire cela

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

0
répondu DimitrisBovasianos 2018-05-30 09:55:40