Devise + Twitter OmniAuth获取用户电子邮件

时间:2014-10-21 10:10:27

标签: ruby-on-rails twitter devise omniauth

我一直在使用Devise + OmniAuth Twitter对我的门户网站的用户进行身份验证。我目前面临两个问题。

  1. 当用户访问/ users / sign_up时,表单是公开可见的。相反,我想将他重定向到Twitter身份验证页面。

  2. 当用户访问/ users / sign_up时,电子邮件表单可见。我正在使用此表单来获取用户在Twitter上成功注册后的电子邮件地址。

  3. 有人可以帮助我直接访问表单的人解决这个问题吗?

    添加代码段:

     #config/routes.rb
      devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
    
      devise_scope :user do
        get "skcript1625" => "devise/sessions#new", as: :login
        get "logout", to: "devise/sessions#destroy", as: :logout
      end
    
    
    
    # app/models/user.rb
     devise :database_authenticatable, :registerable, :rememberable, :trackable, :validatable
     def self.from_omniauth(auth)
            where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
              user.email = auth.info.email
              user.password = Devise.friendly_token[0,20]
              user.name = auth.info.name   # assuming the user model has a name
              user.profileimg = auth.info.profileimg # assuming the user model has an image
            end
          end
    

1 个答案:

答案 0 :(得分:1)

您必须使用以下链接重定向用户

<%= link_to "Sign in with Twitter", user_omniauth_authorize_path(:twitter) %>

确保你告诉你的模特(通常是'用户')它是'omniauthable'

devise :omniauthable, :omniauth_providers => [:twitter]

当用户授权Twitter与应用分享您的信息时,所有用户的信息都以散列request.env["omniauth.auth"]提供。

有关此哈希的更多详细信息,请参阅documentation

编辑:所有内容都得到了很好的解释here