2016-01-07 2 views
6

रेल में 4.x secret_key_base सत्र कुकी पर हस्ताक्षर करने के लिए और cookies.signed पर कॉल करके बनाई गई किसी भी अन्य हस्ताक्षरित कुकीज़ का उपयोग करने के लिए उपयोग किया जाता है।रेल में, क्या पहले हस्ताक्षरित डेटा खोए बिना secret_key_base अपडेट किया जा सकता है?

मैं इस secret_key_base को अद्यतन/चक्र/रोल करना चाहता हूं, लेकिन पहले से हस्ताक्षरित कुकीज़ तक पहुंच खोने के बिना (मुझे सत्र खोने में कोई फर्क नहीं पड़ता)। क्या इसे करना संभव है?

  1. नई secret_key_base जोड़ें:

    आदर्श रूप में मैं की तरह कुछ करना चाहते हैं।

  2. समय-समय पर एक-दूसरे के साथ पुराने और नए secret_key_base दोनों का उपयोग करें, ताकि पुराने कुंजी का उपयोग करके हस्ताक्षरित कुकीज़ को नई कुंजी के साथ फिर से हस्ताक्षरित किया जा सके।
  3. पुराना secret_key_base हटाएं।

मैं जानता हूँ कि एक secret_key_base करने के लिए एक secret_token का उपयोग करने से उन्नयन के लिए इसी तरह की सुविधा नहीं थी। क्या रेल का उपयोग करके इसे हासिल करने का कोई तरीका है?

उत्तर

0

आप इसे अलग तरीके से निपट सकते हैं। पुरानी गुप्त_की को अभी के लिए रखें और एक अस्थायी तालिका बनाएं जहां आप किसी विशेष उपयोगकर्ता को मैप किए गए सभी कुकी डेटा को स्टोर कर सकते हैं। इसके लिए रेडिस का भी उपयोग कर सकते हैं। जब आप पूरी तरह से सुनिश्चित हैं कि सभी मौजूदा कुकी डेटा प्राप्त हुए हैं, तो आप secret_key को बदल सकते हैं। यह सभी कुकी डेटा को अमान्य करना चाहिए। अब जब भी कुकीज़ प्राप्त होती हैं, तो आप पहले जांच सकते हैं कि वह डेटा उपयोगकर्ता के लिए मौजूद है या नहीं और कुकी को तदनुसार सेट करें और अस्थायी तालिका/key_store से प्रविष्टि को हटा दें। एक बार आपके अस्थायी तालिका खाली है, आप तंत्र पूरी तरह

+0

मुझे कैसे पता चलेगा कि यह कौन सा विशेष उपयोगकर्ता है? मैं यह नहीं मान सकता कि विज़िटर लॉग इन है। यहां तक ​​कि अगर हमने प्रत्येक विज़िटर के लिए एक अद्वितीय पहचानकर्ता उत्पन्न किया है, तो ऐसा लगता है कि हमें इसे किसी भी हस्ताक्षरित कुकी में स्टोर करना होगा (इसे किसी और के कुकी डेटा प्राप्त करने के लिए तुच्छ बनाना) या एक और हस्ताक्षरित कुकी (जहां हमने शुरू किया था)। – Felix

2

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

https://github.com/rails/rails/blob/8350925bec434168f56b4fae22b5298cb4a83c41/actionpack/lib/action_dispatch/middleware/cookies.rb

पर एक नजर डालें भी कैसे संदेश सत्यापनकर्ता यहाँ काम कर रहा है चेकआउट।

https://github.com/rails/rails/blob/8350925bec434168f56b4fae22b5298cb4a83c41/actionpack/lib/action_dispatch/middleware/cookies.rb#L251

आशा है कि मदद करता है।

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

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