2011-03-17 13 views
12

मैं रेल 3 पर रूबी का उपयोग कर रहा हूं और मैं रैक मिडलवेयर में cookies.signed विधि का उपयोग करना चाहता हूं। मुझे इसकी आवश्यकता है क्योंकि application_controller.rb फ़ाइल में before_filter का उपयोग करने के बजाय मैं सीधे उपयोगकर्ता को मिडलवेयर में प्रमाणीकृत करना चाहता हूं।रैक मिडलवेयर में कुकीज़ का उपयोग कैसे करें?

उदाहरण के लिए, अगर मैं इस तरह से एक नियंत्रक में है कि विधि का उपयोग करें:

cookies.signed[:user_id'] 

मैं

--- 
- 1 # This is the id of the current signed in user 
- a64ee3asdtjhcc7b35fcb280956be00ba27f94d48dfe4291c06db7d57577d5893 # This is the cookie salt 

मिल लेकिन अगर मैं का उपयोग करें कि एक रैक मिडलवेयर में (एक ही आवेदन के) इस तरीका:

request = Rack::Request.new(env) 
request.cookies.signed[:user_id'] 

मैं

NoMethodError 
undefined method `signed' for #<Hash:0x00000103333d40> 

तो, मैं उस विधि का उपयोग मिडलवेयर में कैसे कर सकता हूं? मैं उपयोगकर्ता आईडी कैसे प्राप्त कर सकता हूं ताकि मैं इसे प्रमाणित कर सकूं?


शायद मैं विस्तार, उदाहरण के लिए, ActionDispatch ... यदि हां, तो कैसे शामिल करने के लिए \ है?

उत्तर

17

ऐसा लगता है कि आप ऐसा करने में सक्षम होना चाहिए:

request = ActionDispatch::Request.new(env) 
    request.cookie_jar.signed[:user_id] #=> 1 

आप GitHub पर .../action_dispatch/middleware/cookies.rb की जांच कर सकते के बारे में पर वास्तव में क्या हो रहा है और अधिक पढ़ने के लिए।

+0

यह मैं सही दिशा में इशारा किया लेकिन अब भी वही त्रुटि (रेल 4.2.7 का प्रयोग करके) उठाया। मुद्दा 'env' में गायब अनुप्रयोग रहस्य था। निम्नलिखित पंक्तियों के साथ पहली पंक्ति को प्रतिस्थापित करना: 'ActionDispatch :: Request.new (Rails.application.env_config.merge (env)) '। – jeffcarbs

3

env हैश में पहले से प्रारंभिक कुकी जार मौजूद है।

env['action_dispatch.cookies'].signed[:user_id] 

उदाहरण के ऊपर एक ActionController::Base उदाहरण संदर्भ में नीचे कॉल करने के लिए बराबर है:

cookies.signed[:user_id] 
+2

दुर्भाग्यवश 'env [' action_dispatch.cookies '] 'किसी भी रैक ऐप्स के लिए उपलब्ध नहीं है। यह केवल अनुरोध प्रसंस्करण में बहुत देर हो चुकी है। –

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