एक रेल आवेदन में "मुझे याद रखें" का कार्यान्वयन

वोट
46

मेरे रेल-ऐप एक मुझे याद रखें चेकबॉक्स के साथ बॉक्स में एक संकेत है। उपयोगकर्ताओं को, जो कि बॉक्स की जांच अपने ब्राउज़र बंद करने के बाद भी में लॉग इन रहना चाहिए। मैं क्या उपयोगकर्ताओं उपयोगकर्ता के सत्र में अपने आईडी भंडारण के द्वारा प्रवेश किया हुआ है का ट्रैक रखने कर रहा हूँ।

लेकिन सत्र सत्र कुकीज़, जो एक समान नहीं हैं, जैसा कि रेल में लागू कर रहे हैं। मैं कर सकते हैं बनाने के लिए उन्हें लगातार:

class ApplicationController < ActionController::Base
  before_filter :update_session_expiration_date

  private

  def update_session_expiration_date
    options = ActionController::Base.session_options
    unless options[:session_expires]
      options[:session_expires] = 1.year.from_now
    end
  end
end

लेकिन यह एक हैक, जो इस तरह के सामान्य कार्यक्षमता के लिए आश्चर्य की बात है की तरह लगता है। वहाँ किसी भी बेहतर तरीका है?

संपादित करें

गैरेथ का जवाब बहुत अच्छा है, लेकिन मैं अभी भी किसी को रेल 2 से परिचित से उत्तर चाहता है (क्योंकि यह अद्वितीय है की CookieSessionStore)।

02/08/2008 को 13:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


8 जवाब

वोट
26

आप लगभग निश्चित रूप से विस्तार नहीं किया जाना चाहिए सत्र कुकी लंबे रहते थे किया जाना है।

हालांकि पटरियों के साथ विशेष रूप से काम कर नहीं इस लेख कुछ लंबाई को जाता है समझाने सर्वोत्तम प्रथाओं 'मुझे याद है' के लिए।

सारांश में हालांकि आपको:

  • उपयोगकर्ता तालिका के लिए एक अतिरिक्त स्तंभ जोड़ें एक बड़े यादृच्छिक मान स्वीकार करने के लिए
  • जो प्रयोक्ता आईडी और यादृच्छिक मान को जोड़ती है ग्राहक पर एक लंबे रहते थे कुकी सेट करें
  • जब कोई नया सत्र आरंभ, आईडी / मूल्य कुकी के होने की जाँच और नए उपयोगकर्ता को प्रमाणित करता है, तो वे मेल खाते हैं।

लेखक भी यादृच्छिक मूल्य प्राप्त नहीं हो और हर लॉग इन पर कुकी रीसेट करने की सिफारिश की गई। व्यक्तिगत तौर पर मैं ऐसा नहीं के रूप में आप तो दो कंप्यूटर पर किसी साइट में प्रवेश नहीं रह सकते है। मुझे यकीन है कि अपना पासवर्ड बदलते समारोह भी यादृच्छिक मूल्य इस प्रकार अन्य मशीनों पर सत्र बाहर ताला लगा रीसेट बना देती हैं जाएगा।

एक अंतिम ध्यान दें, सलाह वह कुछ कार्यों (पासवर्ड बदलें / ईमेल परिवर्तन आदि) ऑटो प्रमाणीकृत सत्र के लिए उपलब्ध नहीं बनाने पर देता है साथ ही निम्नलिखित लायक लेकिन शायद ही कभी असली दुनिया में देखा जाता है।

02/08/2008 को 17:10
का स्रोत उपयोगकर्ता

वोट
10

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

यहाँ मैं क्या किया है है:

  • सत्र कुकी लंबे समय तक रहा हो पर सेट है (6 महीने या तो)
  • सत्र की दुकान के अंदर
    • एक तारीख है कि प्रवेश करने के लिए + 24 घंटे के लिए निर्धारित है 'को समाप्त हो रहा'
    • यूज़र आईडी
    • (कुकी छेड़छाड़ सुरक्षा की वजह से खतरनाक नहीं) प्रमाणीकृत = सच तो मैं अनाम उपयोगकर्ता sesssions के लिए अनुमति दे सकते हैं
  • मैं आवेदन नियंत्रक कि जाँच करता है सत्र का भाग 'को समाप्त हो रहा' में एक before_filter जोड़ें।

उपयोगकर्ता "मुझे याद रखें" बॉक्स की जाँच करता है जब, मैं सिर्फ सेट सत्र [: expireson] तारीख के लिए लॉग इन होने के लिए + 2 सप्ताह। कोई भी कुकी चोरी कर सकते हैं और हमेशा के लिए में लॉग इन या क्योंकि रेल सत्र कुकी छेड़छाड़ प्रूफ है किसी अन्य उपयोगकर्ता का छद्मवेष रहें।

16/09/2008 को 22:37
का स्रोत उपयोगकर्ता

वोट
9

मेरा सुझाव है कि आप या तो RESTful_Authentication पर एक नज़र में प्लग है, जो इस के एक कार्यान्वयन है, या बस अपने कार्यान्वयन RESTful Authentication_plugin उपयोग करने के लिए स्विच करें। वहाँ कैसे Railscasts पर में इस प्लग का उपयोग करने के बारे में एक अच्छा विवरण है:

Railscasts # 67 restful_authentication

यहाँ प्लगइन खुद के लिए एक लिंक है

restful_authentication

17/09/2008 को 15:17
का स्रोत उपयोगकर्ता

वोट
5

restful_authentication प्लग इन को इस का एक अच्छा कार्यान्वयन है:

http://agilewebdevelopment.com/plugins/restful_authentication

06/08/2008 को 22:30
का स्रोत उपयोगकर्ता

वोट
3

मैं रेल के लिए एक शानदार प्रमाणीकरण समाधान के लिए वसीयत के लिए जाना होगा।

16/01/2011 को 05:26
का स्रोत उपयोगकर्ता

वोट
3

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

01/09/2008 को 22:46
का स्रोत उपयोगकर्ता

वोट
3

यह 30 दिन की लगातार सत्र बनाने में से एक लोग अनुभव का एक बहुत अच्छी लेख है।

चेतावनी: ब्लॉग पोस्ट 2006 से है

http://grahamglass.blogs.com/main/2006/05/rails_sessionsr.html

03/08/2008 को 02:53
का स्रोत उपयोगकर्ता

वोट
2

यह मेरे लिए एक आकर्षण की तरह काम किया:

http://squarewheel.wordpress.com/2007/11/03/session-cookie-expiration-time-in-rails/

अब मेरी CookieStore सत्र, दो सप्ताह के बाद समाप्त हो जिससे उपयोगकर्ता आदेश एक और दो सप्ताह के लिए लगातार लॉग-इन होने के लिए फिर से अपने लॉगइन क्रेडेंशियल्स प्रस्तुत करना होगा।

Bascially, यह के रूप में सरल है:

  1. विक्रेता में एक फ़ाइल सहित / plugins निर्देशिका
  2. आवेदन नियंत्रक में सेट सत्र समाप्ति मूल्य सिर्फ एक लाइन का उपयोग
20/09/2008 को 09:58
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more