2011-10-06 17 views
8

मैं वार्डन के after_authenticate कॉलबैक से वर्तमान सत्र का उपयोग करने की कोशिश कर रहा हूँ (वसीयत के नीचे चल रहा है) रेल 3.वार्डन से सत्र तक पहुँचने के लिए कैसे/रेल में after_authentication कॉलबैक वसीयत

मैं चाहता हूँ अपने आवेदन नियंत्रक के शीर्ष पर में

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(session[:pending_ids]) 
end 

अंतिम लक्ष्य रिकॉर्ड आईडी सत्र में संग्रहीत किया गया की एक सूची लेने से पहले साइन अप करें और साइन इन करने के बाद उपयोगकर्ता मॉडल के साथ उन्हें संबद्ध करने के लिए है

किसी भी मदद करेंगे: की तरह कुछ करने के लिए। बहुत ऐप बनो reciated।

उत्तर

21

"auth.session" मिल से पूरे सत्र पा सकते हैं/में डेटा सेट सत्र कुंजी "warden.user। # {स्कोप}। सत्र"।

जाना चाहिए तुम्हें अपने रेल अनुप्रयोग के भीतर pending_ids बचा लिया:

session[:pending_ids] = ... 

और आप वार्डन हुक में acces करना चाहता था, आप इसे इस तरह से पहुंच सकता है:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.env['rack.session'][:pending_ids]) 
end 

यह मुझे कुछ समय लिया इसे खोजने के लिए, तो मुझे लगता है कि यह किसी के लिए कुछ मदद की हो सकती है।

(मूल रूप से diegoscataglini.com/2012/02/09/383/manipulating- सत्र-in-wardendevise से लिया गया है, जो अब मर चुका है)।

+1

के लिए अपरिभाषित स्थानीय चर या विधि 'सत्र' मिलता है यह मेरे लिए काम करता है, auth.session के नीचे का जवाब नहीं था। – cpuguy83

+0

धन्यवाद! यह एक बहुत छोटी चाल है! – LukeS

2

आप auth के माध्यम से सत्र की दुकान का उपयोग कर सकते हैं:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.session[:pending_ids]) 
end 
+0

मैंने पाया कि auth.session काम नहीं किया। यह मौजूद है, लेकिन नियंत्रक संदर्भ से सत्र के समान नहीं है। – cpuguy83

+0

जब मैं ऐसा करता हूं तो मुझे # <कक्षा: 0x007fa2cbfe6c60> –

0

आप auth.request.session के माध्यम से सत्र तक भी पहुंच सकते हैं।

तो अपने उदाहरण होगा:

Warden::Manager.after_authentication do |user,auth,opts| 
    user.associate_with_ids(auth.request.session[:pending_ids]) 
end