2011-09-02 20 views
9

जैसे omniauth प्रदाता का उपयोग करते समय डेविस संग्रहीत स्थान पर ठीक से रीडायरेक्ट नहीं करता है मेरे पास मेरे ऐप में कुछ क्रियाएं हैं जो सुरक्षित हैं और उपयोगकर्ता प्रमाणीकरण की आवश्यकता है। चूंकि मैं devise का उपयोग कर रहा हूँ, मैं certicate_user का उपयोग करें! उन्हें बचाने के लिए फिल्टर से पहले। जब भी उपयोगकर्ता संरक्षित पृष्ठ पर हिट करता है, तो उपयोगकर्ता को लॉगिन करने के लिए कहें और फिर सुरक्षित पृष्ठ पर रीडायरेक्ट करें। यह हिस्सा पूरी तरह से काम करता है।फेसबुक

समस्या यह है कि जब उपयोगकर्ता मेरे ऐप के माध्यम से फेसबुक के साथ लॉगिन करने का प्रयास करता है, तो उपयोगकर्ता लॉगिन के बाद उपयोगकर्ता को सुरक्षित पृष्ठ पर रीडायरेक्ट नहीं करता है। यह हमेशा उपयोगकर्ता को रूट यूआरएल पर फेंक देता है। मानक प्रमाणीकरण के साथ यह कोई समस्या नहीं है

मुझे संदेह है कि इसे पासथ्रू विधि के साथ कुछ करना है जो सर्वव्यापी एकीकरण की आवश्यकता है। किसी भी मदद बहुत सराहना की जाएगी

यहाँ omniauth कॉलबैक के लिए मेरे कोड का टुकड़ा है:

def facebook 
# You need to implement the method below in your model 
omniauth = request.env["omniauth.auth"] 
@user = User.find_for_facebook_oauth(omniauth, current_user) 

if @user.persisted? 
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
    sign_in_and_redirect @user, :event => :authentication 
else 
    session["devise.facebook_data"] = env["omniauth.auth"] 
    redirect_to new_user_registration_url 
end 
end 

def passthru 
    render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false 
end 
+1

आप यह पता लगा सकते थे? मुझे अभी भी एक ही समस्या है, और मुझे लगता है कि पिछले पृष्ठ पर रीडायरेक्ट करने के लिए एक साथ devise और omniauth को एकीकृत करने का तरीका नहीं लगता है। – kibaekr

+0

यह कोड आपके क्लाइंट या आपके प्रदाता में है? – emerak

उत्तर

9

हम का उपयोग फेसबुक जे एस एक्सेस कोड जो तब omniauth_callback_controller.rb और संकेत में उपयोगकर्ता वापस करने के लिए रिटर्न पाने के लिए

मुझे पता चला कि मूल URL अनुरोध में सहेजा गया है। हमारे लिए एक इलाज किया।

application_controller.rb में

def after_sign_in_path_for(resource_or_scope) 
    if request.env['omniauth.origin'] 
     request.env['omniauth.origin'] 
    end 
end 
+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। Request.env ['omniauth.origin'] और IE का उपयोग करने के साथ कुछ समस्याएं हैं, आप यहां [link] (https://github.com/intridea/omniauth/issues/306) देख सकते हैं। Howevever, एक और मुद्दा यह है कि मेरे संरक्षित अनुरोध पर कॉल एक AJAX है, इसलिए omniauth.origin उस पर प्रतिबिंबित नहीं करता है बल्कि मेरा आखिरी अनुरोध प्राप्त करता है। – amunda

+0

मैं डेविस के साथ फेसबुक जेएस एपीआई का उपयोग करने की भी कोशिश कर रहा हूं। आप omniauth_callback_controller पर एक्सेस कोड कैसे पारित कर रहे हैं? – CodeWombat

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