前提
omniauth-facebookでfacebookログイン自体は完成していること(順序逆ですが、そのうちFacebookログインについても書きます)。
やりたいこと
デフォルトでは取得出来ないFacebookログイン時にuserのFirst_nameとLast_name、Genderを取得する。
実装
// models/user.rb
def self.from_omniauth(auth)
user = User.where('email = ?', auth.info.email).first
if user.blank?
user = User.new
end
//ここにbinding.pryでAPIから何が取得できているか確認しながら作業するのがオススメです。
user.facebook_uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.first_name = auth.extra.raw_info.first_name
user.last_name = auth.extra.raw_info.last_name
user.gender = auth.extra.raw_info.gender
user.facebook_icon = auth.info.image
user.facebook_token = auth.credentials.token
user.facebook_expires_at = Time.at(auth.credentials.expires_at)
user
end
modelのuser.rbに以下を追加します。
・user.first_name = auth.extra.raw_info.first_name
・user.last_name = auth.extra.raw_info.last_name
・user.gender = auth.extra.raw_info.gender
※ usersテーブルにfirst_name
、last_name
、gender
カラムを作っていない場合は、
rails g migration AddColumnToUsers first_name last_name gender
とすればカラムを作成できます。
コメントでも書きましたが、binding.pryで処理を止めて、auth
とpryに入力すれば取得しているデータを確認出来るので、いいかと思います。
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET_KEY'], info_fields: 'first_name, last_name, gender'
end
環境変数の後にinfo_fields
を追加してあげます。
以上でfirst_nameとlast_name、genderを取得できます。