2013-05-07 1 views
13

मैं अपने रेल आवेदन में ट्विटर लॉगिन सक्षम करने के लिए omniauth-twitter मणि का उपयोग कर रहा हूं। यहाँ मेरी कोड ... है"omniauth-twitter" ईमेल आईडी रेल पर रूबी में ट्विटर से नहीं लाया गया है

gemfile -

gem 'omniauth', '~> 1.1.1' 
gem 'omniauth-twitter' 

routes.rb -

match '/auth/twitter/callback', to: 'users#twitter_login' 
match 'auth/failure', to: 'static_pages#home' 

User_controller.rb -

 def twitter_login 
     auth = request.env['omniauth.auth'] 
     authentication = Authentication.find_by_provider_and_uid(auth['provider'],auth['uid']) 
     if authentication 
      sign_in authentication.user 
      redirect_to root_url 
     else 
     if(User.where(:email => auth['extra']['raw_info']['email']).exists?) 
      flash[:notice] = "You already have account in ibetter" 
      redirect_to root_url   
     else 
      user = User.new 
      user.apply_omniauth(auth)   
      if user.save(:validate => false)  
       sign_in user   
       flash[:notice] = "Welcome to Ginfy"   
       redirect_to root_url 
      else 
       flash[:error] = "Error while creating a user account. Please try again." 
       redirect_to root_url 
      end 
      end 
     end 
    end 

session_helper.rb -

def sign_in(user) 
    cookies.permanent[:remember_token] = user.remember_token 
    self.current_user = user 
    end 

User.rb मॉडल -

before_save { |user| user.email = email.downcase } 
    def apply_omniauth(auth) 
    self.email = auth['extra']['raw_info']['email'] 
    self.name = auth['extra']['raw_info']['name'] 
    authentications.build(:provider => auth['provider'], :uid => auth['uid'], :token => auth['credentials']['token']) 
    end 

ERB कोड -

<%= link_to image_tag("login-twitter.png", alt: "twitter"), "/auth/twitter",:class => "popup", :"data-width" => "600", :"data-height" => "400" %> 

ईमेल आईडी चहचहाना से नहीं लाया है। कृपया

+0

मैंने एक समान समस्या को डीबग करने के लिए प्रिये का उपयोग किया। 'Pry' मणि शामिल करें, और फिर ट्विटर से ईमेल आईडी प्राप्त करने की अपेक्षा करने से पहले 'binding.pry' जोड़ें। फिर आप ट्विटर से प्रतिक्रिया का निरीक्षण कर सकते हैं और पता लगा सकते हैं कि क्या हो रहा है। http://yorickpeterse.com/articles/debugging-with-pry/ आपको प्रिये पर शुरू करने में मदद करनी चाहिए। –

+0

आपकी टिप्पणी के लिए धन्यवाद, 'pry' डिबगिंग के लिए भयानक मणि। अब यह इस तरह से दिखता है [1] pry (# )> self.email = auth ['extra'] ['raw_info'] ['ईमेल'] => nil' '[2] pry (# )> स्वयं .name = auth ['extra'] ['raw_info'] ['name'] => "गिन्फी" ' – SoftwareGeek

+0

[इसे जांचें] (http://stackoverflow.com/questions/3599621/is-there-a-way एक-उपयोगकर्ता-ईमेल-आईडी-बाद-सत्यापन-उसकी-ट्विटर-पहचान-हमें) – SoftwareGeek

उत्तर

14

ट्विटर आपको एपीआई के माध्यम से ईमेल नहीं देता है।

यह काम करता है यदि आप उदाहरण के लिए omniauth-facebook मणि का उपयोग कर रहे हैं, लेकिन ट्विटर आपको ईमेल प्रदान नहीं करता है - आपको एक वर्कअराउंड बनाना होगा।

उदाहरण के लिए उपयोगकर्ता को अपना ईमेल पता भरने के लिए दूसरे चरण में पूछें।

+5

मुझे ईमेल को "#{twitter_nickname}@example.org" के रूप में ऑटोपॉपुल करके और इसके अवकाश में उपयोगकर्ता को बदलकर इसके आसपास मिल गया है। –

+0

हे टॉम, मुझे वर्तमान में एक ही समस्या है। क्या आप अपना कोड ईमेल पर ऑटोपॉप्लेट करने के तरीके पर साझा कर सकते हैं? –

+0

मैं पहले_क्रेट हुक जोड़ूंगा और उन्हें ईमेल सेट कर दूंगा। – Mattherick

0

GEM ठीक काम कर रहा है समस्या Twitter किसी कारण से return email नहीं है। facebook के विपरीत ..

+0

यदि आप अपनी ट्विटर अनुमतियां अपडेट करते हैं और आप अभी भी OmniAuth हैश में ईमेल फ़ील्ड प्राप्त नहीं कर रहे हैं, तो आपको अतिरिक्त पैरामीटर प्राप्त करने के लिए अपने ट्विटर क्रेडेंशियल टोकन को अपडेट करना होगा। – ZombieBsAs

4

स्वीकृत उत्तर पुराना है। ट्विटर अब इस Special Permission Form के माध्यम से ईमेल प्रदान कर रहा है। विशेष अनुमतियों का अनुरोध करने वाले फॉर्म को पूरा करें और अनुमोदन की प्रतीक्षा करें।

अधिक जानकारी के लिए आप this answer देख सकते हैं।

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