2011-04-26 12 views
5

मैं ट्विटर के साथ मणि का उपयोग कर रहा हूँ। कॉलबैक पर, जांचें कि क्या उपयोगकर्ता मौजूद है और उसे बनाएं या उसे होमपेज पर वापस भेज दें।
मैं कुछ गलत कर रहा हूं, लेकिन मेरे कॉलबैक कोड में, request.env ['omniauth.origin'] शून्य है।Omniauth - उत्पत्ति शून्य

मेरे कोड काफी सरल है:
whatever.html.erb

<%= link_to image_tag("twitter-connect.png"), "/auth/twitter" %> 

routes.rb

match "/auth/:provider/callback" => "sessions#create" 

sessions_controller.rb

def create 
    auth = request.env["omniauth.auth"] 
    user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth) 
    if !user.email 
     redirect_to confirm_path, :notice => "Add your email!" 
    else 
     redirect_to request.env['omniauth.origin'] || root_url, :notice => "Signed in!" 
    end 
end 

यदि मैं request.env ['omniauth.origin'] कॉलबैक के ठीक बाद उठाता हूं, तो मुझे शून्य ऑब्जेक्ट मिलता है।

आपकी मदद के लिए धन्यवाद!

+0

आप omniauth का कौन सा संस्करण उपयोग कर रहे हैं? –

+0

मैं पूछता हूं क्योंकि, मुझे लगता है कि omniauth के नए संस्करणों से संबंधित समस्याएं हैं। –

+0

HI आदित्य। मैंने आज सुबह 0.2.4 पर अपडेट किया, इसलिए नवीनतम रिलीज। – Laurent

उत्तर

0

संस्करण 0.2.0 आज़माएं - मैं इस संस्करण को रेल 3.0.9 और रूबी 1.9.2-पी 180 के साथ किसी भी मुद्दे के बिना काम करने में सक्षम हूं।

  1. नहीं करना चाहिए अपनी लाइन के रूप में

    उपयोगकर्ता = auth.find_by_provider_and_uid (प्रमाणन [ "प्रदाता"], प्रमाणन [ "uid"]) को पढ़ने के ऊपर || User.create_with_omniauth (auth)

  2. nil के रूप में, this discussion देखें।

+0

दिशा के लिए हाय माइक, thx। 1 के बारे में), सुनिश्चित नहीं => मैं उपयोगकर्ता को जानकारी में जानकारी ढूंढने की कोशिश कर रहा हूं, और अगर उसे नहीं मिला तो उसे बना रहा हूं। – Laurent

+0

ठीक है, मेरा मुद्दा यह है कि आप 'user.find_by_provider_and_uid' नहीं कर सकते क्योंकि उपयोगकर्ता मॉडल में प्रदाता/uid फ़ील्ड नहीं हैं; पिछली बार मैंने 'find_by_ *' गतिशील खोजक की जांच की है, जो आपको केवल उस विशिष्ट मॉडल के गुण निर्दिष्ट करने की अनुमति देता है। दूसरी ओर आप यह देखने के लिए जांच सकते हैं कि वर्तमान लेख में कोई संबंधित उपयोगकर्ता है, यानी 'if_user == auth.user'। मैंने जिस तर्क का उपयोग किया [चेक] [https://github.com/bsodmike/omniauth_scratch/blob/50d9e9ca37dae1c69818a0454e301178ff3e0759/app/controllers/authentications_controller देखें।rb); मैंने 'current_user && प्रमाणीकरण 'करने का दृष्टिकोण लिया। –

0

आपको अपने दृश्य में लिंक को मैन्युअल रूप से सेट करने की आवश्यकता है। रेल 4 में, request.original_url ऐसा करने का सबसे अच्छा तरीका है।

अपने LINK_TO ट्विटर बटन में, आप मूल मैन्युअल रूप से सेट कर सकते हैं:

"/auth/twitter?origin=#{request.original_url}" 
अपने SessionsController में

फिर जब आप request.env को [ 'omniauth.origin'], रीडायरेक्ट कर इसे सही ढंग से कार्य करना चाहिए।

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