[英]How can I view user's personal data with omniauth?
我想通過 Ruby on Rails 使用 gem Omniauth 查看用戶的個人數據。 目前,我只能查看公開數據。 我收到錯誤電子郵件不能為空,因為我只能訪問公共數據,而不是個人用戶數據。 所有的答案都表示贊賞。 這是我的應用程序的代碼:
#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
您需要在 GitHub omniauth 配置上請求特定范圍。
配置/初始化程序/devise.rb
config.omniauth :github, 'YOUR_API_KEYS', scope: 'user'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.