Pertanyaan Django “Remember Me” dengan tampilan login dan formulir otentikasi built-in


Bagaimana saya dapat menggunakan kembali login admin asli () dan AuthenticationForm untuk menetapkan panjang cookie yang lebih panjang untuk pengguna dengan opsi "ingat saya" dicentang pada halaman login? Saat ini saya menggunakan login built-in melalui urls.py

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

Kotak centang diimplementasikan dalam login.html saya sebagai:

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

tetapi saya tidak yakin cara meneruskan informasi itu melalui AuthenticationForm ke django.contrib.auth.views.login

Saat ini, jika pengguna log "ingat saya" kotak tidak dicentang, usia cookie didefinisikan dalam settings.py

SESSION_COOKIE_AGE = 360

Saya menemukan beberapa pertanyaan serupa tetapi saya tidak berpikir ini harus memerlukan aplikasi terpisah untuk diinstal. Cuplikan di bawah ini (http://djangosnippets.org/snippets/1881/) sepertinya menjanjikan tetapi saya telah mengkodekan python dan Django hanya untuk beberapa bulan dan saya tidak bisa membuatnya bekerja:

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)

32
2018-02-26 22:13


asal


Jawaban:


Periode cookie sesi Django didefinisikan dalam detik.

SESSION_COOKIE_AGE = 360

berarti sesi akan berakhir setelah 6 menit. Saya baru saja menerapkan fitur 'Ingat Saya' dan saya mengatur yang berikut:

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

Tampilan masuk perlu diganti seperti yang Anda tunjukkan di cuplikan.

Tapi sepertinya Anda mengalami masalah aneh ketika menutup browser (ketika mengingat saya tidak dicentang) tidak mengharuskan pengguna untuk masuk kembali yang seharusnya tidak terjadi jika Anda menggunakan set_expiry (0). Saat Anda menggunakan set_expiry (0), django mengatur cookie panjang 'session' sebagai lawan dari cookie dengan panjang tetap dan dengan desain akan kedaluwarsa setelah browser ditutup.

Ada pengaturan lain yang mempengaruhi membersihkan cookie pada browser dekat. Mungkin Anda dapat mencoba mengubah nilai pengaturan SESSION_EXPIRE_AT_BROWSER_CLOSE atau memeriksa nilai yang ada di konfigurasi Anda. https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions


15
2018-02-18 21:36



Jadi request.set_expiry (O) hanya login pada pengguna anonim tetapi authedicated .. jika aku jadi kamu, aku akan melakukan ini

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


0
2018-05-29 08:49