Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"omniauth-twitter" email id is not fetched from twitter in ruby on rails

i am using omniauth-twitter gem to enable Twitter login in my rails application. Here is my code ...

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 model -

  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 code -

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

Email id is not fetched from twitter. Please help

like image 666
Free-Minded Avatar asked May 07 '13 09:05

Free-Minded


2 Answers

Omniauth gem fetch the users email

see: include_email=true

you have to enable the additional information Additional Permission

like image 168
Avinash Kumar Singh Avatar answered Oct 07 '22 01:10

Avinash Kumar Singh


The accepted answer is outdated. Twitter is providing email now via this Special Permission Form. Complete the form requesting special permissions and wait for approval.

Also you can see this answer for more info.

like image 38
ZombieBsAs Avatar answered Oct 06 '22 23:10

ZombieBsAs