我一直在使用Devise + OmniAuth Twitter对我的门户网站的用户进行身份验证。我目前面临两个问题。
当用户访问/ users / sign_up时,表单是公开可见的。相反,我想将他重定向到Twitter身份验证页面。
当用户访问/ users / sign_up时,电子邮件表单可见。我正在使用此表单来获取用户在Twitter上成功注册后的电子邮件地址。
有人可以帮助我直接访问表单的人解决这个问题吗?
添加代码段:
#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
答案 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