2011-07-11 18 views
34

मेरे पास ऐप में फेसबुक से कनेक्ट करने के लिए/उपयोगकर्ता/auth/facebook लोड करने की क्षमता है। मैं यह जानना चाहता हूं कि अनुरोध कहां से आया था। चाहे वह किसी ऐसे उपयोगकर्ता से हो जो फेसबुक के साथ पंजीकरण कर रहा हो, या मौजूदा उपयोगकर्ता जो फेसबुक से कनेक्ट करना चाहता हो। इस प्रकार के आधार पर, प्रतिक्रियाएं बहुत अलग हैं।डेविस + Omniauth - अतिरिक्त पैरामीटर कैसे पास करने के लिए?

प्रमाणीकरण करते समय मैं सर्वव्यापी के साथ एक param कैसे पारित कर सकता हूं। मैं कर की कोशिश की:

/users/auth/facebook?connect_action=signup_connect_to_facebook 

लेकिन उस connect_action परम यह नहीं कर सकता था कि जब यह हिट AuthenticationsController #

विचार बनाएँ? थांस्क

उत्तर

93

आप

omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2') 

के रूप में, :params विकल्पों का उपयोग करने के लिए है और बाद में कॉलबैक में आप request.env['omniauth.params'] का उपयोग हैश प्राप्त करने के लिए कर सकते हैं! :)

+8

पूरी तरह से बस मेरे गधे को बचाया। धन्यवाद महोदय। –

+2

यह आदर्श रूप से काम करेगा लेकिन कोड में एक बग है! https://github.com/intridea/omniauth/issues/543 तो, मैंने अभी अपने सत्र में मूल्य असाइन किया है, और इसे कॉलबैक पर साफ़ कर दिया है :) – whizcreed

+1

मैं इसका उपयोग कर रहा हूं, समस्या नहीं! (1.1.0) – fuzzyalej

8

यदि अनुरोध आपके आवेदन के विभिन्न पृष्ठों से किया गया है, तो आप request.env ['omniauth.origin'] की जांच कर सकते हैं। Omniauth स्वचालित रूप से इस चर बचाता है।

Here एक अधिक विस्तृत विवरण

जहाँ तक कस्टम पैरामीटर प्रदान करने के रूप में है, मैं इस असफल करने की कोशिश की है। here समझाया गया है कि प्रदाता को जाने से पहले इसे सत्र में संग्रहीत करना है।

उम्मीद है कि यह आपकी मदद करता है।

+0

क्या omniauth + devise suports करता है? –

+0

हाँ, मैं अपने ऐप में इसका उपयोग कर रहा हूं, दोनों devise और omniauth – e3matheus

+0

मैंने इस पोस्ट पर उतरने से पहले इस दृष्टिकोण का उपयोग किया था। लेकिन मैंने इसे चरणबद्ध कर दिया क्योंकि @fuzzyalej द्वारा सुझाए गए समाधान ने काम किया और क्लीनर दिखता है। –

1

फेसबुक के लिए 'राज्य' पैरामीटर का उपयोग करें और आप जो चाहते हैं उसे पास करें, लेकिन एन्कोड को न भूलें।

/users/auth/facebook?state=parameter 

आप पैरामीटर को यूआरएल फॉर्म एन्कोडेड जेसन के रूप में भेज सकते हैं और फिर कॉलबैक पार्स में इसे भेज सकते हैं।

+2

'राज्य 'पैरामीटर का उपयोग केवल क्रॉस-साइट अनुरोध जालसाजी (सीएसआरएफ) टोकन पास करने के लिए किया जाना चाहिए। – Ashitaka

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