2009-07-29 17 views
17

तैनात करने के बाद टोकन एप्लिकेशन पर हमारे रूबी को तैनात करने के लिए हम इंजनयार्ड क्लाउड का उपयोग कर रहे हैं। हम रेल v2.3.3 चला रहे हैं।रेल - अमान्य प्रामाणिकता टोकन

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

हम ActiveRecord के सत्र स्टोर का उपयोग कर रहे हैं और सत्र डेटाबेस में सहेजे जा रहे हैं।

ActionController :: InvalidAuthenticityToken /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/request_forgery_protection.rb:

यह त्रुटि हम जो देख रहे है: 79: `में verify_authenticity_token '

सत्र वस्तु शून्य तैनाती के बाद है, तथापि, सत्र डेटा अभी भी डेटाबेस में बनी रहती है और सत्र ID कुकी अभी भी मौजूद है:

सत्र:

  • सत्र id: शून्य
  • डेटा: शून्य

हम इस एक व्याख्या करने में सक्षम नहीं किया गया है। मूल कारण क्या हो सकता है पर कोई विचार?

किसी भी सुझाव के लिए धन्यवाद!


संपादित करें: इस पर अपडेट करने के लिए, हम त्रुटि का एक उदाहरण अलग करने में सक्षम हैं।

1) उपयोगकर्ता भार फार्म 2) कोड सर्वर पर अद्यतन किया जाता है 3) उपयोगकर्ता प्रस्तुत प्रपत्र ** अमान्य प्रामाणिकता टोकन त्रुटि तब होती है

ऐसा लगता है कि जब पर्यावरण परिवर्तन, रेल के साथ इस संभालने में असमर्थ है प्रामाणिकता टोकन।

हम को हल करने के लिए कई कदम की कोशिश की है:

  • सत्र
  • सत्र कुकी हटाया जा रहा है (दोनों जावास्क्रिप्ट में और रेल) ​​
  • रीसेट किया जा रहा कोड
  • की तैनाती के बाद डेटाबेस में सत्र तालिका वाइप हो रहा है

कुछ भी काम नहीं करता है। काम करने वाली एकमात्र चीज उपयोगकर्ता को अपने कुकीज़ क्लाइंट-साइड को साफ़ कर रही है।

(हम गुगलिंग (यहां तक ​​कि Binging की कोशिश की!) जवाब के लिए, लेकिन कोई पासा नहीं है।यह एक समान संबंधित मुद्दा प्रतीत होता है: http://railsforum.com/viewtopic.php?id=21479)

इसके अलावा: शुरू में हमने सोचा था कि यह इंजनयार्ड पर हमारी तैनाती के लिए अलग था, लेकिन हम इसे हमारे विकास सर्वर पर पुन: पेश करने में भी सक्षम हुए हैं जिसे हम Capistrano के माध्यम से तैनात करते हैं।

किसी भी विचार को कृतज्ञता से स्वीकार किया जाएगा।

धन्यवाद!

+0

मेरे पास अभी जवाब देखने के लिए समय नहीं है, लेकिन आप रेल स्रोत में जाना चाहते हैं और देखें कि ऑथ टोकन कैसे उत्पन्न होता है। यह हो सकता है कि सर्वर पुनरारंभ करना उस मान को बदल रहा है जिसका उपयोग टोकन के बीज में किया जाता है। – Rafe

उत्तर

13

उत्तर: इंजनयार्ड (वे बहुत ही अच्छे हैं!) के व्यापक काम के बाद वे इस मुद्दे का निदान करने में सक्षम थे। इस मुद्दे का मूल कारण मंगल क्लस्टर के साथ एक बग है। शुरू होने के बाद मंगलेल को पहला पोस्ट अनुरोध नहीं दिख रहा है।EngineYard व्यापक काम किया है निदान करने के लिए इस:

वहाँ समस्या पैदा कर अपने कोड में कुछ भी हो प्रतीत नहीं होता है और मुझे लगता है हमारे पर्यावरण कि बग के रूप में अच्छी तरह से (http://www.thought-scope.com/2009/07/mongrelcluster-rails-23x-bad-post.html) का अनुभव किया है से बाहर के लोग मिल गया है। मुझे लगता है कि बहुत से लोग इसे नहीं देखते हैं क्योंकि साइट पर पहला अनुरोध आम तौर पर एक पोस्ट नहीं होता है या वे इसे फ्लुक्स तक ले जाते हैं।

[कर्ल का उपयोग करके एक संभावित कार्यवाही है।] कर्ल काम करने के लिए सर्वर पर आपके प्रत्येक मोन्गल्स को एक सामान्य जीईटी अनुरोध करना होगा ताकि वे बोल सकें। आप इसे कैपिस्ट्रानो के साथ कर सकते हैं, लेकिन यदि आप डैशबोर्ड के माध्यम से तैनात करते हैं तो यह काम नहीं करेगा। आप तैनाती हुक पर एक छोटी अनुभाग पा सकते हैं हम बुनियादी ढांचे यहाँ में बनी: https://cloud-support.engineyard.com/faqs/overview/getting-started-with-engine-yard-cloud

एक सरल रन कर्ल http://localhost:500x>/dev/बातिल काम करना चाहिए (जहां एक्स बंदरगाह आप अपने वर्तमान पर 5,000-50,005 है जोड़ा जा रहा है सेट अप)।

हमने मोंगल से पैसेंजर तक अपना स्टैक स्विच करके इस मुद्दे को संबोधित किया है, लेकिन जाहिर है, मंगल के लिए एक फिक्स काम में है। उम्मीद है कि यह किसी ऐसे अजीब मुद्दे को देखने में मदद करता है।

+1

मैंने अभी मोंगल से पैसेंजर तक स्विच किया और यह 3 बाल खींचने वाले मुद्दों को ठीक कर दिया। –

+0

खुशी है कि यह आपकी मदद की !! – shedd

11

प्रामाणिकता टोकन इस रूप में एक छिपी हुई फ़ील्ड है कि जब फॉर्म सबमिट किया जाता है तो यह सुनिश्चित किया जाता है कि पोस्ट डेटा लाइव सत्र से आ रहा है।

यह दुर्भावनापूर्ण लोगों को किसी साइट पर सबमिट करने के लिए किसी साइट पर सबमिट करने के लिए एक साइट का उपयोग करने से रोकने के लिए सुरक्षा उपाय के रूप में है।

आप config/environment.rb

config.action_controller.allow_forgery_protection = false 

को यह जोड़कर अपने पूरे एप्लिकेशन पर बंद बदल सकते हैं आप इसे एक एकल नियंत्रक

skip_before_filter :verify_authenticity_token 

का उपयोग कर देते हैं या

protect_from_forgery :except => :index 
पर बदल सकते हैं

अधिक जानकारी के लिए ActionController::RequestForgeryProtection::ClassMethods दस्तावेज़ देखें

+0

प्रतिक्रिया के लिए धन्यवाद! हां, हम समझते हैं कि टोकन क्या करता है और इसे पूरी तरह अक्षम कैसे करें। हम इसका उपयोग करने में सक्षम होना चाहते हैं अगर हम हल कर सकते हैं कि यह प्रत्येक तैनाती पर क्यों टूटता है। – shedd

+0

यह टिप इस समस्या के लिए एक अच्छा कामकाज प्रदान करता है। मुझे अमेज़ॅन ईसी 2 के साथ एक ही समस्या का सामना करना पड़ रहा है। (सुरक्षित) दीर्घकालिक समाधान क्या है? –

+3

यह एक समाधान नहीं है। यह एक असुरक्षित कामकाज है। – rubiii

4

ऐसा लगता है कि प्रमाणीकरण के लिए उपयोग की जाने वाली गुप्त कुंजी बदल रही है जब आप पुन: नियोजित करते हैं, सभी मौजूदा सत्रों को अमान्य कर देते हैं।

क्या आपके पास कॉन्फ़िगरेशन पैरामीटर config.action_controller.session कहीं भी सेट है, और यदि आप ऐसा करते हैं, तो क्या कोई ऐसा चीज है जिससे आप पुन: नियोजित होने पर इसे बदल सकते हैं?

मेरे ऐप्स में से एक ने इसे config/environment.rb में कॉन्फ़िगर किया है, और हालिया एक (रेल 2.3 के साथ जेनरेट) ने इसे config/initializers/session_store.rb में सेट किया है। सेटिंग लगता है:

config.action_controller.session = { 
    :secret  => 'long-string-of-hex-digits' 
    } 

आप इस किसी कारण के लिए कॉन्फ़िगर नहीं है, तो, rake secret आप के लिए एक महत्वपूर्ण है, जो तब आपके विन्यास में डाला जा सकता उत्पन्न होगा।

(यदि यह — है और यह अपने तैनाती द्वारा बदला नहीं जा रहा है प्रक्रियाओं — तो मैं पता नहीं क्या हो रहा है है।)

+0

एचएम। वास्तव में दिलचस्प विचार। मैं निश्चित रूप से इसे अधिक विस्तार से देखूंगा और देख सकता हूं कि मैं प्रत्येक तैनाती पर गुप्त कुंजी बदल सकता हूं या नहीं। – shedd

0

मैं कभी नहीं विवरण पता लगाने के लिए किसी भी लम्बाई के लिए चले गए हैं, लेकिन मेरे लिए , यह क्लाइंट-साइड डेटा रोट इश्यू है। अगर मैं अपने सत्रों को संग्रहीत करने के तरीके से गड़बड़ कर रहा हूं (और इसलिए, मेरे प्रमाणीकरण विवरण,) मुझे समय-समय पर यह त्रुटि मिलती है। निजी ब्राउज़र डेटा साफ़ करना; कुकीज़, प्रमाणीकृत सत्र, काम, हमेशा इसे मेरे लिए हल किया है।

उम्मीद है कि इससे मदद मिलती है।

1

यदि यह केवल मोंग्रेल्स के लिए होगा! मुझे यात्री पर भी वही त्रुटि मिल रही है (उपयोगकर्ता लोड फॉर्म, तैनाती, सबमिट -> अवैध प्रामाणिकता टोकन)। यह जानना दिलचस्प होगा कि आपने यात्री को स्विच करके इस मुद्दे को कैसे हल किया? कोई और संकेत अत्यधिक स्वागत है। मैं एक करीब के रूप में अच्छी लग रही

चीयर्स होगा ...!

+1

ठीक है, मेरी गलती। जैसा कि http: //weblog.rubyonrails में बताया गया है।संगठन/200 9/3/16/रेल-2-3-टेम्पलेट्स-इंजन-रैक-मेटल-रेलवे 2.3.x के साथ काम करने के लिए यात्री को भी अपडेट करना चाहिए (मैं अभी भी यात्री 2.0.3 का उपयोग कर रहा था)। अपडेट करने के बाद (2.2.5 के रूप में) यह ठीक काम करता है। चियर्स! –

+0

खुशी है कि आप इसे काम कर रहे हैं! यात्री और रेल 2.3.x के साथ, यह समस्या पूरी तरह से हल हो रही है। – shedd

1

रेल 2.3 और एक Mongrel क्लस्टर के साथ एक ही समस्या का सामना करना पड़ा है जहां सत्र रहस्य निश्चित रूप से सत्र प्रारंभकर्ता में सेट किया गया है। ग्राहक पर क्लाइंट कुकीज़ को साफ़ करने के बाद भी समस्या आई।

हालांकि काम करने के बाद पुनरारंभ करने के बाद एक कर्ल करने के सुझाव को सभी मोंग्रेल्स में अनुरोध मिलता है - धन्यवाद किसी ने इसे समझ लिया क्योंकि यह बहुत प्यारा अस्पष्ट प्रतीत होता है।

एकमात्र अतिरिक्त जानकारी जो मैं आपूर्ति कर सकता हूं हम अपने मोंगल के सामने https के साथ अपाचे mod_proxy_balancer का उपयोग कर रहे हैं, हालांकि यह समस्या एसएसएल चालू करने से पहले हो रही थी। क्या कोई इसे अपाचे के बजाय बैलेंसर के रूप में हैप्रोक्सी के साथ देख रहा है?

1

यह मेरे लिए इस मुद्दे को हल :-) :-) :-)

https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4690-mongrel-doesnt-work-with-rails-238#ticket-4690-37 माइक बेथानी अगस्त 30 वीं, 2010 तक प्रकाशित किया गया था @ 06:43।

+1

अपनी पोस्ट में मुख्य विचार शामिल करने का प्रयास करें। दूसरी साइट नीचे जा सकती है। – jcjr

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