2011-02-17 18 views
40

याद रखें मैं वसीयत मणि config सेटिंग्स के साथ भ्रमित कर रहा हूँ:वसीयत मेरे एवं सत्र

# The time the user will be remembered without asking for credentials again. 
    config.remember_for = 2.weeks 

    # The time you want to timeout the user session without activity. After this 
    # time the user will be asked for credentials again. 
    config.timeout_in = 10.minutes 

मैं एक उपयोगकर्ता का चयन करें "मुझे याद रखें" चेकबॉक्स (यानी, मुझे लॉगिन रखने के लिए) करना चाहते हैं, लेकिन डिफ़ॉल्ट सत्र टाइमआउट 10 मिनट है। 10 मिनट के बाद यह मुझे फिर से लॉग इन करने के लिए कहता है, भले ही मैंने "मुझे याद रखें" पर क्लिक किया हो। यदि यह सत्य है तो याद_for वास्तव में व्यर्थ है। जाहिर है मैं यहाँ कुछ याद कर रहा हूँ।

+3

मुझे नहीं लगता कि आपको एक ही समय में इन 2 कॉन्फ़िगरेशन का उपयोग करना चाहिए। – Rafal

उत्तर

16

timeout_in स्वचालित रूप से निष्क्रियता के 10 मिनट के भीतर आपको लॉग आउट करेगा और remember_me चेकबॉक्स के साथ असंगत है। आप एक हो सकते हैं, लेकिन दोनों नहीं।

+2

अब और मान्य नहीं है, –

+1

के नीचे पेट की टिप्पणी पर नज़र डालें याद_मेम काम नहीं कर रहा है, चाहे टाइमआउट सक्षम या अक्षम हो। – indb

+1

नए devise संस्करण में, दोनों मॉड्यूल संगत हैं, हालांकि याद रखने योग्य समय सारिणी के दौरान प्राथमिकता लेते हैं। – aromero

27

रयान सही है कि डिफ़ॉल्ट डेविस मणि दोनों को याद नहीं करता है: याद रखने योग्य और समय सारिणी विकल्प। हालांकि, रूबी की सभी चीजों की तरह, अगर आपको यह निर्णय पसंद नहीं है कि कुछ अन्य कोडर ने बनाया है, खासकर जब यह मानदंड से निकलता है कि अधिकांश उपयोगकर्ताओं की अपेक्षा की जा सकती है, तो आप इसे आसानी से ओवरराइड कर सकते हैं।

के लिए धन्यवाद एक (अस्वीकार कर दिया) pull request हम (/config/initializers/devise.rb) अपने वसीयत कॉन्फ़िग फ़ाइल के शीर्ष करने के लिए निम्न कोड जोड़कर इस व्यवहार को ओवरराइड कर सकते हैं:

module Devise 
    module Models 
    module Timeoutable 
     # Checks whether the user session has expired based on configured time. 
     def timedout?(last_access) 
     return false if remember_exists_and_not_expired? 
     last_access && last_access <= self.class.timeout_in.ago 
     end 

     private 

     def remember_exists_and_not_expired? 
     return false unless respond_to?(:remember_expired?) 
     remember_created_at && !remember_expired? 
     end 
    end 
    end 
end 

यह अब होगा आपको दोनों विकल्पों को कॉन्फ़िगर करने की अनुमति देता है और उन्हें उम्मीद है कि आप काम करेंगे।

config.remember_for = 2.weeks 
config.timeout_in = 30.minutes 
+11

मैं इस परियोजना में डेविस को अपग्रेड कर रहा हूं जिसके लिए मुझे इस पैच की आवश्यकता है (मैंने पुल अनुरोध का उल्लेख किया है) - और यह पता चला है कि प्रश्न में प्रतिबद्धता डेविस में है, भले ही पुल अनुरोध अस्वीकार कर दिया गया हो। तो दोनों सेटिंग्स अब एक साथ काम करना चाहिए। – pat

+0

यह काम नहीं कर रहा है। – indb

8

पिछले उत्तरों की जानकारी पुरानी है। मैंने अपनी परियोजना का परीक्षण किया है, जो सुनिश्चित करने के लिए Rails 4 और Devise 3.5.1 और also checked devise code का उपयोग करता है। , यह जाँच करता है if last_access <= timeout_in.ago, config.timeout_in तदनुसार

का उपयोग कर

  • अगर yes, यह if remember_exists_and_not_expired की जाँच करता है, तो मूल रूप से सत्र प्रबंधन

  • अगर no के लिए config.remember_for उपयोग करता है:

    अब यह लग रहा है कि क्या Remember Me चेकबॉक्स चेक किया गया था

+2

16 दिसंबर 2015 को प्रासंगिक चेक [हटा दिए गए थे] (https://github.com/plataformatec/devise/commit/c92996646aba2d25b2c3e235fe0c4f1a84b70d24#diff-389934f38297288517a36c5adfddcc8aL29)। तो ... लगता है जैसे "खुद के लिए देखें" अब सबसे विश्वसनीय रणनीति है। –

+0

जनवरी 2016 को, प्रासंगिक चेक वापस जोड़ें: ### 3.5.5 - 2016-22-01 * बग फिक्स * वापस याद रखें_expired? कार्यान्वयन * अगर मुझे याद है कि टाइमआउट को ट्रिगर नहीं किया गया है तो मुझे याद रखें –

संबंधित मुद्दे