13

我正在使用omniauth-twitter gem 在我的rails 应用程序中启用Twitter 登录。这是我的代码...

宝石文件 -

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

路线.rb -

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

用户控制器.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" %>

电子邮件 ID 不是从 twitter 获取的。请帮忙

4

5 回答 5

14

Twitter 不会通过 API 向您提供电子邮件。

例如,如果您使用omniauth-facebook gem,则此方法有效,但twitter 不为您提供电子邮件-您必须创建一个解决方法。

例如,要求用户在第二步填写他/她的电子邮件地址。

于 2013-05-07T10:37:54.460 回答
5

接受的答案已过时。Twitter 现在通过此特别许可表提供电子邮件。填写申请特殊权限的表格并等待批准。

您还可以查看此答案以获取更多信息。

于 2015-11-06T15:13:38.947 回答
4

Omniauth gem 获取用户电子邮件

请参阅:include_email=true

您必须启用附加信息 附加权限

于 2018-07-03T08:26:27.070 回答
0

工作正常,GEM问题Twitter不是return email出于某种原因。不像facebook..

于 2013-05-07T10:41:43.603 回答
0

正如 Avinash kumar singh 的回答中所述,编辑 Twitter 应用程序的附加权限以请求电子邮件地址:

编辑推特应用权限

因此,在授权对话框中添加了一个电子邮件请求:

推特授权对话框

这将导致auth.info.email响应散列中存在一个值。

注意:我正在使用omniauth-twitter宝石。

于 2019-03-06T01:39:27.247 回答