2012-04-19 16 views
18

मैं वसीयत 2.0 और मणि omniauth-twitterवसीयत 2.0

समस्या

है कि चहचहाना जवाब में एक ई-मेल नहीं भेजता उपयोग कर रहा हूँ पर omniauth-चहचहाना के लिए ईमेल सत्यापन छोड़ें, तो अपने आवेदन के मॉडल उपयोगकर्ता है इस बात को मान्य एक ई-मेल और मैं कॉलबैक में निम्न त्रुटि मिलती है:

Email can't be blank 

मैं अपने user.rb में इस राशि मॉडल:

#config omniauth twitter 
def self.find_for_twitter_oauth(access_token, signed_in_resource = nil) 
    data = access_token.extra.raw_info 
    if user = User.where(:username => data.screen_name).first 
     user 
    else 
     User.create!(:username => data.screen_name, :password => Devise.friendly_token) 
    end 
end 

और मैं में इस राशि मेरी

def twitter 
    @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) 
    if @user.persisted? 
     flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter" 
     sign_in_and_redirect @user, :event => :authentication 
    else 
     # http://stackoverflow.com/questions/7117200/devise-for-twitter-cookie-overflow-error 
     session["devise.twitter_data"] = request.env["omniauth.auth"].except('extra') 
     redirect_to new_user_registration_url 
    end 
    end 

मैं उपयोगकर्ता भेजने समाचार पत्र, advertirser के लिए एक ईमेल पता देने के लिए करने के लिए बल चाहते omniauth_callbacks_controller.rb ... आदि

मैं कैसे इस समस्या को ठीक कर सकते हैं?

धन्यवाद!

उत्तर

0

आपको ईमेल फ़ील्ड की उपस्थिति सत्यापन को हटाने की आवश्यकता है। this post का पालन करें और देखें कि क्या यह काम करता है। देर से प्रतिक्रिया के लिए खेद है, उम्मीद है कि यह मदद करता है।

+3

धन्यवाद jacobaweiss, लेकिन मुझे उपयोगकर्ता से एक ईमेल प्राप्त करने की आवश्यकता है। मैं अपने डेटाबेस में अपने ईमेल के बिना किसी उपयोगकर्ता को सहेज नहीं सकता :(शायद मुझे एक रीडायरेक्ट बनाने की आवश्यकता है और एक फॉर्म दिखाएं और उपयोगकर्ता को अपना खाता बनाने के लिए ईमेल लिखना होगा। मैं यह कैसे कर सकता हूं? धन्यवाद – hyperrjas

+0

मुझे लगता है कि आपको इसकी आवश्यकता है जानकारी को भरने के लिए उपयोगकर्ता को कुछ रूपों पर मजबूर करें, लेकिन मैं यह खोज रहा हूं कि यह कैसे करें:/ – CanCeylan

2

मुझे एक ही समस्या का सामना करना पड़ रहा है, ट्विटर आपको ओथ के माध्यम से ईमेल नहीं देता है, आपको ईमेल प्राप्त करने के लिए किसी अन्य तरीके से सोचना होगा। एकमात्र समाधान जिसे मैंने पाया, कॉलबैक को ओवरराइड कर रहा है और ट्विटर डेटा का उपयोग एक फॉर्म को स्वतः पूर्ण करने के लिए करता है और उपयोगकर्ता को अपने मेल को पूरा करने का मौका देता है और फिर उपयोगकर्ता को डेटाबेस में साइन अप और सहेजने का मौका देता है।

Is there a way to get an user's email ID after verifying his/her Twitter identity using OAuth?

29

अपने प्रयोक्ता मॉडल को यह करें::

def email_required? 
    super && provider.blank? 
end 

आप पासवर्ड के लिए एक समान विधि का उपयोग कर सकते हैं:

def password_required? 
    super && provider.blank? 
end 

यह

निम्नलिखित प्रश्न देखो Omniauth provi का उपयोग करते समय क्षेत्र की आवश्यकताओं को ओवरराइड करना चाहिए ders।

+0

यहां एक ही समस्या है, मैंने अपने उपयोगकर्ता को अपने कोड को लागू किया है। आरबी लेकिन मुझे निम्न त्रुटि मिल रही है: अपरिभाषित स्थानीय चर या # <उपयोगकर्ता: 0x007ffdfc41d730> के लिए विधि 'प्रदाता'।प्रदाता विधि user.rb में कहीं भी परिभाषित नहीं है? –

+0

@TonyP क्या आपके पास अपने उपयोगकर्ता मॉडल पर 'प्रदाता' विशेषता है? – zykadelic

+0

क्या आप थोड़ा और स्पष्टीकरण जोड़ सकते हैं जो यह करता है? यदि पासवर्ड और ईमेल के लिए user.rb में हाथ लिखित सत्यापन नियम हैं, तो क्या यह या तो काम करता है? मेरे लिए नहीं :( – Gediminas

2

एक समाधान अच्छी तरह से यहाँ समझाया गया है: http://asciicasts.com/episodes/236-omniauth-part-2

और GitHub पर: https://github.com/fertapric/rails3-mongoid-devise-omniauth/wiki/How-To:-Retrieve-email-information-(middle-step)-from-providers-like-Twitter-or-LinkedIn

किसी कारण से, इस सवाल इन कड़ियों की तुलना में गूगल के खेमे में अधिक दिखाई देंगी, ताकि मैंने सोचा कि मैं जोड़ना होगा उन्हें जवाब के लिए।

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