किसी को भी मदद कर सकते हैं मुझे इस समस्या की तह तक पहुंचने?सही नियंत्रक मार क्यों वसीयत नहीं है + Omniauth कॉलबैक?
मैं रेलवे 3.2 ऐप में डेविस + ओमनीउथ का उपयोग कर रहा हूं। मैं क्या जानना चाहता हूं, डेविस के user_omniauth_authorize_path(provider)
विधि के दृश्यों के पीछे क्या हो रहा है।
मुझे रेक मार्गों और मणि के स्रोत के माध्यम से खुदाई हुई है, लेकिन मुझे कुछ भी स्पष्ट नहीं दिख रहा है जो मेरे पास समस्या का कारण बन जाएगा।
मुझे लगता है कि यह विधि बस प्रदाता के साइनइन यूआरएल (उदा। ट्विटर) को कॉल करती है और फिर रूट.आरबी में परिभाषित कॉलबैक पथ पर वापस आती है।
मेरी routes.rb में मैं
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
है उन में/omniauth_callbacks_controller.rb मैं
def twitter
render :text => "This works"
end
def passthru
render :text => "This doesn't work"
end
है एक दृश्य मैं <%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>
है में। इस लिंक पर क्लिक करना ट्विटर पर जाता है जहां मैं लॉग इन कर सकता हूं, लेकिन मेरे ऐप पर लौटने पर मुझे एक त्रुटि मिलती है "आप पहले ही साइन इन हैं"।
मैं बाहर कैसे या क्यों इस त्रुटि उत्पन्न की जा रही है काम नहीं कर सकता। मुझे केवल "यह काम" देखना चाहिए या "यह काम नहीं करता"।
मेरे पास एक ही तरह से एक फेसबुक प्रदाता स्थापित है, और यह अपेक्षा के अनुसार काम करता है।
यदि मैं <a href="https://stackoverflow.com/users/auth/twitter">Twitter</a>
के साथ डेविस के सर्वव्यापी लिंक को प्रतिस्थापित करता हूं तो मुझे "यह काम" मिलता है।
तो यह मेरी समस्या हल करता है, लेकिन यह आदर्श नहीं है और मैं जानना चाहता हूं क्यों।
किसी को भी किसी भी प्रकाश डाला सकता है?
संपादित
रैक मार्गों इस तरह दिखता है:
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)
हाय askitaka, इन सुझावों के लिए धन्यवाद। मैं सिफारिशों के आधार पर 'पासथ्रू' का उपयोग कर रहा हूं https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview और http://stackoverflow.com/questions/5531263/omniauth-doesnt-work-with-route -globbing-in-rails3 wrt मार्ग globbing। क्या यह अब सलाह नहीं दी जा रही है? वैसे भी, आपने मुझे सोचने के लिए कुछ नई चीजें दी हैं। धन्यवाद! मैं इसे आज़माउंगा और रिपोर्ट करूंगा। –
हाय असितका, क्या आप जीईटी कॉल की तुलना करके इसका मतलब बता सकते हैं। मैंने कंसोल में 'app.get'/users/auth/twitter'' चलाया है। दोनों कॉल '302' लौटाते हैं, जिनकी अपेक्षा की जा सकती है। क्या इन कॉलों को अधिक जानकारी में जांचने का कोई तरीका है? या 302 रीडायरेक्ट का पालन करने के लिए? –
दोह! इसके बारे में थोड़ा और सोचने के बाद, आप सही हैं। यह पासथरू समारोह था। मैं पासस्थु का उपयोग कर रहा हूं क्योंकि मेरे पास मार्गों में सभी को पकड़ है। आरबी। किसी और चीज पर काम करते समय, मैं इस प्रश्न को मेरे प्रश्न के अनुसार पाठ प्रस्तुत करने के लिए संपादित कर दूंगा। लेकिन इस नियंत्रक का उद्देश्य omniauth अनुरोधों पर 404 वापस करना है। पासस्ट्रू समारोह के बिना, omniauth बस काम नहीं करता है। अब थोड़ा बेवकूफ महसूस करें :) इस अष्टिका को इंगित करने के लिए धन्यवाद! –