2012-04-16 13 views
10

"गूगल के साथ प्रवेश करें" करने की कोशिश कर के बाद, मैं लॉग में यह त्रुटि दिखाई दे रही:डेविस/Omniauth विफलता: इसे डीबग कैसे करें?

Processing by Users::OmniauthCallbacksController#failure as HTML 

मैं गूगल से सभी डेटा देख सकते हैं (लॉग में) यूआरएल के माध्यम से भेजा जा रहा है, उपयोगकर्ता सहित ईमेल और नाम। तो क्या गलत हो सकता है? मेरी कॉलबैक भी निष्पादित नहीं की जा रही है। मुझे केवल मेरी साइट के साइन_इन पेज पर रीडायरेक्ट किया जाता है।

और मुझे पूरा यकीन है कि सब कुछ ठीक से कॉन्फ़िगर किया गया है, क्योंकि यह कुछ हफ्ते पहले ठीक काम कर रहा था। मुझे नहीं लगता कि मैंने कुछ भी बदल दिया है। फेसबुक लॉगिन अभी भी ठीक काम करता है।

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

अद्यतन

मैं नियंत्रक

def failure 
    render :text => params.inspect 
end 

कौन सा रीडायरेक्ट बंद कर दिया करने के लिए एक 'विफलता' विधि जोड़ा, और मुद्रित करें:

{} 

यूआरएल था इस:

/users/auth/google/callback?_method=post&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud&openid.response_nonce=2012-04-16T12%3A25%3A49Z_v1fNngSQJaHBQ&openid.return_to=http%3A%2F%2Fdev.myapp.me%3A3000%2Fusers%2Fauth%2Fgoogle%2Fcallback%3F_method%3Dpost&openid.assoc_handle=AMlYA9Urw_lYamPphTSdQ9a6DU0Ez0y5RaDDM78qPL7Xgm77nMpJiB85&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle%2Cns.ext1%2Cext1.mode%2Cext1.type.ext5%2Cext1.value.ext5%2Cext1.type.ext8%2Cext1.value.ext8%2Cext1.type.ext2%2Cext1.value.ext2&openid.sig=2FPjo7U1e%2Fde248XpUgjQLduNAM%3D&openid.identity=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.claimed_id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.ns.ext1=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ext1.mode=fetch_response&openid.ext1.type.ext5=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst&openid.ext1.value.ext5=Some_User&openid.ext1.type.ext8=http%3A%2F%2Faxschema.org%2Fcontact%2Femail&openid.ext1.value.ext8=some_email%40gmail.com&openid.ext1.type.ext2=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast&openid.ext1.value.ext2=Some_User 

तो बात यह है कि मुझे आवश्यक सभी डेटा यूआरएल में है, लेकिन devise/omniauth इसे पकड़ नहीं रहा है (और जाहिर है यही कारण है कि यह मेरे कॉलबैक के बजाय 'विफलता' विधि को बुला रहा है)। मुझे नहीं पता कि यह 'पैराम्स' सरणी, या क्या के माध्यम से सुलभ होना चाहिए।

मैं ?_method=post भाग के बारे में भी चिंतित हूं, क्योंकि मेरी साइट के सभी अनुरोध अनुरोध प्राप्त कर रहे हैं। शायद इसका मतलब यह है कि Google द्वारा omniauth द्वारा किया गया अनुरोध POST था।

कोई विचार?

उत्तर

0

क्या आपने हाल ही में अपने रत्नों को अपग्रेड किया था? यदि ऐसा है, तो यह पिछले मणि संस्करणों के साथ omniauth और संस्करणों को तैयार करने के लिए उपयोगी हो सकता है। यह एक omniauth/devise निर्भरता भी बदल सकता है जो बदल गया।

मुझे बिल्कुल यकीन नहीं है कि इस विशिष्ट मामले में समस्या क्या है, लेकिन यदि आप कोड में गहरी खुदाई करना चाहते हैं, तो pry-debug मणि इंस्टॉल करें। यह आपको चरण और अगले डीबग कमांड के साथ pry इंटरफ़ेस देता है। अपने कोड में pry.binding जोड़ें और यह सर्वर में निष्पादन को रोक देगा और pry इंटरफ़ेस लाएगा। उदाहरण के लिए:

def failure 
    binding.pry 
    render :text => params.inspect 
end 
+2

आपको लोगों को यह भी बताना चाहिए कि उन्हें काम करने के लिए pry मणि इंस्टॉल करने की आवश्यकता होगी https://github.com/pry/pry – Will

2

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मेरे पास यह वही समस्या थी और नेट की मदद से मुझे कुछ भी नहीं मिला। समस्या को हल करता है कि मैं प्यूमा (थिन से लाए गए प्रथाओं) का उपयोग कैसे कर रहा था। मैं एक ही मशीन (अपाचे रिवर्स प्रॉक्सी) पर एकाधिक प्यूमा प्रक्रियाएं शुरू कर रहा था और ऐसा लगता है कि गीथब से कॉल-बैक मूल प्रमाणीकरण अनुरोध की तुलना में एक अलग प्यूमा प्रक्रिया में जा रहा था। मैंने प्यूमा प्रक्रियाओं को एक तक नीचे ले लिया और फिर से स्थिति नहीं मिली (प्यूमा श्रमिकों का उपयोग करने के लिए स्विच किया गया: puma -w 5, जो बदले में अपाचे राउंड रॉबिन के बजाय प्यूमा द्वारा प्रबंधित प्रक्रियाओं का उपयोग करता है)। यही कारण है कि मैंने इस मुद्दे पर विकास में कभी भी ठोकर खाई क्योंकि मैं उस माहौल में प्रक्रियाओं का समूह नहीं चलाता।

2

मुझे एहसास है कि यह एक पुराना सवाल है और जिस व्यक्ति ने मूल रूप से इसे पूछा है या तो इसे हल किया है या किसी अन्य समाधान में स्थानांतरित हो गया है, हालांकि, मुझे एक ही समस्या का सामना करना पड़ा, और समाधान के लिए मेरी खोज ने मुझे यहां ले जाया।

मैं इसे हल करने में कामयाब रहा, इसलिए यहां यह अगले व्यक्ति के लिए खोज रहा है।

यह छोटा हो गया।

# config/initializers/omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :github, ENV['github_key'], ENV['github_secret'] 
end 

# config/initializers/devise.rb 
Devise.setup do |config| 
    # ... devise config not related to omniauth ... 
    config.omniauth :github, ENV['github_key'], ENV['github_secret'] 
end 

तो, मैं दो स्थानों पर omniauth प्रदाता को विन्यस्त था, और यह परस्पर विरोधी था: यह है कि मैं क्या था।

बाद मैं omniauth.rb से config हटा दिया, /auth/github/callback को GitHub से पुनर्निर्देशन अनुरोध Users::OmniauthCallbacksController#github बजाय #failure द्वारा कार्रवाई की जा रही शुरू कर दिया के रूप में स्थिति परिवर्तन करने से पहले किया गया था।

तो गूंगा त्रुटि और इतने कम जानकारी के साथ काम करने के लिए ...

3

के बारे में कैसे आप Omniauth डिबग मूल सवाल का जवाब करने के लिए, यहाँ कैसे Omniauth के लिए लॉगिंग सक्षम करने के लिए। config/initializers/devise.rb में यह पंक्ति जोड़ तुम सिर्फ करने के बाद अपने Omniauth रणनीतियों को परिभाषित:

OmniAuth.config.logger = Rails.logger if Rails.env.development? 

आप लोड अधिक मिलेगा

(आप वसीयत, बस Omniauth उपयोग नहीं कर रहे हैं, तो बजाय config/initializers/omniauth.rb पर कोड शामिल) आपकी लॉग फ़ाइल में Omniauth की जानकारी - कॉलबैक चरण से पूर्ण प्रतिक्रिया सहित।

+0

शानदार उत्तर, धन्यवाद। –

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