Идентификатор электронной почты "omniauth-twitter" не извлекается из твиттера в рубине на рельсах - программирование

Идентификатор электронной почты "omniauth-twitter" не извлекается из твиттера в рубине на рельсах

Я использую omniauth-twitter gem, чтобы включить Twitter-вход в моем приложении rails. Вот мой код...

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" %>

Идентификатор электронной почты не извлекается из твиттера. Пожалуйста, помогите

4b9b3361

Ответ 1

Twitter не дает вам адрес электронной почты через API.

Это работает, если вы используете, например, omniauth-facebook gem, но twitter не предлагает вам электронную почту - вам нужно создать обходной путь.

Например, попросите пользователя на втором этапе заполнить его/ее адрес электронной почты.

Ответ 2

Принятый ответ устарел. Twitter теперь предоставляет электронную почту через специальную форму разрешения. Заполните форму, запрашивающую специальные разрешения, и дождитесь утверждения.

Также вы можете увидеть этот ответ для получения дополнительной информации.

Ответ 3

GEM работает нормально, проблема в том, что проблема Twitter не return email по какой-либо причине. в отличие от facebook..