2013-02-26 159 views
30

के साथ Django "मुझे याद रखें" लॉगिन पृष्ठ पर चेक किए गए "मुझे याद रखें" विकल्प वाले उपयोगकर्ताओं के लिए लंबी कुकी लंबाई निर्धारित करने के लिए मैं मूल व्यवस्थापक लॉगिन() और प्रमाणीकरण फ़ॉर्म का पुन: उपयोग कैसे कर सकता हूं? मैं वर्तमान के माध्यम से निर्मित लॉगिन का उपयोग कर रहा urls.pyअंतर्निहित लॉगिन दृश्य और प्रमाणीकरण फ़ॉर्म

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

चेकबॉक्स के रूप में मेरे login.html में कार्यान्वित किया जाता:

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

लेकिन मुझे यकीन है कि कैसे के माध्यम से उस जानकारी को पारित करने के लिए नहीं कर रहा हूँ

वर्तमान में django.contrib.auth.views.login को AuthenticationForm, अगर उपयोगकर्ता के लॉग "मुझे याद रखें" बॉक्स चुना, कुकी उम्र settings.py

SESSION_COOKIE_AGE = 360 
01 में परिभाषित किया गया है

मुझे कुछ समान प्रश्न मिले लेकिन मुझे नहीं लगता कि इसे स्थापित करने के लिए एक अलग ऐप की आवश्यकता होनी चाहिए। नीचे दिए गए स्निपेट (http://djangosnippets.org/snippets/1881/) होनहार लग रहा था, लेकिन मैं केवल महीने की जोड़ी के लिए अजगर और Django कोडित है और मैं यह काम कर रहा प्राप्त करने में सक्षम नहीं था:

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) 
+0

स्निपेट वास्तव में एक और तरीके से काम कर रहा है लेकिन मुख्य विचार अभी भी चेकबॉक्स चयन के आधार पर कुकी समाप्ति सेट करना है। – Sawwy

+0

स्निपेट सही है, बस याद किए गए लॉगिन की समाप्ति के लिए 'SESSION_COOKIE_AGE' सेट करें, और' request'ession.set_expiry (0) 'के अंदर' 0' 'को एक-ऑफ लॉगिन की समाप्ति पर सेट करें। – okm

+0

ठीक है, मुझे अब यह काम करने में मिला है कि डिफ़ॉल्ट सत्र की लंबाई 5 सेकंड है और मुझे याद है कि सत्र 30 है (केवल परीक्षण उद्देश्यों के लिए)। हालांकि, जब मैं set_expiry (0) का उपयोग करता हूं, तो ब्राउज़र को बंद करने पर सत्र हटाया नहीं जाता है (पूरे ब्राउजर को टैब नहीं बंद करना)। मुद्दा इसके बाद बनी हुई है: 1) django_session से हटाएं (डेटाबेस से सभी सत्र जानकारी हटाने के लिए) 2) सभी ब्राउज़र इतिहास साफ़ करें (क्रोम 25.0.1364.97)। मैं खरोंच से शुरू करता हूं लेकिन एक बार जब यह उपयोगकर्ता लॉग इन होता है, तो यह लॉग इन रहेगा। क्या मुझे कुछ और करने की ज़रूरत है? – Sawwy

उत्तर

14

Django सत्र कुकी उम्र seconds में परिभाषित किया गया है।

SESSION_COOKIE_AGE = 360 

का अर्थ है कि सत्र 6 मिनट के बाद समाप्त हो जाएगा। मैं हाल ही में 'मुझे याद रखें' सुविधा को क्रियान्वित किया है और मैं निम्नलिखित सेट:

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

लॉगिन दृश्य ओवरराइड की जरूरत के रूप में आप टुकड़ा में दिखाया गया है।

लेकिन लगता है कि आपको एक अजीब समस्या है जहां ब्राउजर को बंद करना (जब मुझे याद नहीं किया जाता है) को उपयोगकर्ता को पुनः लॉगिन करने की आवश्यकता नहीं होती है, यदि आप set_expiry (0) का उपयोग करते हैं तो ऐसा नहीं होना चाहिए। जब आप set_expiry (0) का उपयोग करते हैं, तो django एक निश्चित लंबाई कुकी के विपरीत 'सत्र' लंबाई कुकी सेट करता है और डिज़ाइन द्वारा यह ब्राउज़र बंद होने के बाद समाप्त हो जाएगा।

एक और सेटिंग्स है जो ब्राउज़र पर क्लियरिंग कुकी को प्रभावित करती है। शायद आप SESSION_EXPIRE_AT_BROWSER_CLOSE सेटिंग के मान को बदलने का प्रयास कर सकते हैं या अपनी कॉन्फ़िगरेशन में मौजूदा मान की जांच कर सकते हैं। https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions