Ruby on rails 如何查看用户';omniauth的个人数据?

Ruby on rails 如何查看用户';omniauth的个人数据?,ruby-on-rails,ruby,omniauth,Ruby On Rails,Ruby,Omniauth,我想用RubyonRails上的GemOmniAuth查看用户的个人数据。现在,我只能查看公共数据。我收到的错误电子邮件不能为空,因为我只能访问公共数据,而不能访问个人用户数据。感谢您的回答。以下是我的应用程序代码: #identity.rb class Identity < ActiveRecord::Base belongs_to :user validates_presence_of :uid, :provider validates_uniqueness_of :uid,

我想用RubyonRails上的GemOmniAuth查看用户的个人数据。现在,我只能查看公共数据。我收到的错误电子邮件不能为空,因为我只能访问公共数据,而不能访问个人用户数据。感谢您的回答。以下是我的应用程序代码:

#identity.rb

class Identity < ActiveRecord::Base
 belongs_to :user
 validates_presence_of :uid, :provider
 validates_uniqueness_of :uid, :scope => :provider

 def self.find_for_oauth(auth)
   find_or_create_by(uid: auth.uid, provider: auth.provider)
 end

end

#user.rb


      def self.find_for_oauth(auth, signed_in_resource = nil)
identity = Identity.find_for_oauth(auth)
user = signed_in_resource ? signed_in_resource : identity.user
if user.nil?

  email = auth.info.email
  user = User.where(:email => email).first if email

  # Create the user if it's a new registration
  if user.nil?
    user = User.new(
      full_name: auth.info.name,
      username: 'User'+auth.uid,
      email: auth.info.email,
      password: auth.uid
    )
    user.skip_confirmation!
    user.save!
   end 
end


if identity.user != user
  identity.user = user
  identity.save!
end
user
 end

#omniauth_callbacks_controller.rb


     def self.provides_callback_for(provider)
class_eval %Q{
  def #{provider}
    @user = User.find_for_oauth(env["omniauth.auth"], current_user)

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication
      set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
    else
      session["devise.#{provider}_data"] = env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end
}
 end

[:github, :google_oauth2].each do |provider|
provides_callback_for provider
 end
#identity.rb
类标识:provider的唯一性
定义self.find_for_oauth(auth)
查找或创建用户(uid:auth.uid,提供程序:auth.provider)
结束
结束
#user.rb
def self.find_for_oauth(auth,signed_in_resource=nil)
identity=identity.find_for_oauth(auth)
用户=在资源中签名?已签名的\u-in\u资源:identity.user
如果user.nil?
email=auth.info.email
user=user.where(:email=>email)。第一个if email
#如果是新注册,则创建用户
如果user.nil?
user=user.new(
全名:auth.info.name,
用户名:“用户”+auth.uid,
电子邮件:auth.info.email,
密码:auth.uid
)
user.skip\u确认!
user.save!
结束
结束
如果identity.user!=用户
identity.user=用户
身份,救命!
结束
用户
结束
#omniauth\u回调\u控制器.rb
def self.为(提供程序)提供回调
等级评估%Q{
定义#{provider}
@user=user.find_for_oauth(env[“omniauth.auth”],当前_用户)
如果@user.persistent?
登录并重定向@user,事件::身份验证
如果是导航格式,设置flash消息(:注意,:成功,种类:“{provider}”.capitalize)?
其他的
会话[“设计.{provider}\u数据”]=env[“omniauth.auth”]
将\重定向到新\用户\注册\ url
结束
结束
}
结束
[:github,:google_oauth2]。每个do |提供者|
为提供程序提供\u回调\u
结束

您需要在GitHub omniauth配置上请求特定的作用域

config/initializers/designe.rb

config.omniauth :github, 'YOUR_API_KEYS', scope: 'user'

你对Google和Github都有问题吗?Github,因为有些人选择不公开显示电子邮件,也许在config/designe.rb中请求特定的作用域会有所帮助。这对于Facebook是必需的,但对于github则不确定。config.omniauth:github,“API密钥”,作用域:'user'是的,这就成功了,杰夫!Thx非常甜蜜,我也会加上这个作为答案