OAuth2でYouTubeログインを設定しました。ユーザー登録が成功したら、ユーザーの性別と場所をデータベースに保存したいと思います。
OAuthドキュメントhttps://developers.google.com/accounts/docs/OAuth2Login#userinfocallを確認する と、名前、メールアドレス、プロフィール写真などとともに、ユーザーの性別や場所にアクセスできることがわかります。
以下は、ユーザー情報をデータベースに保存するための私のコードです
user.rb
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.picture = auth.info.image
user.gender = auth.info.gender
user.country = auth.info.locale
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
ただし、auth.info.USER_INFO構成を使用しても、これらの値はデータベースに保存されないようです。私は何かが足りないのですか?
これが私のアプリがスコープなしで要求しているパラメーターです。
アップデート
userinfo.profileパラメーターに追加のスコープを渡すことで、これを機能させることができました。スペースで区切られたコンマを含まない完全なURLを含めることを忘れないでください。
Rails.application.config.middleware.use OmniAuth::Builder do
provider :youtube, YOUTUBE_KEY, YOUTUBE_SECRET, { :scope => "https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com", access_type: 'offline', approval_prompt: '' }
end
これは次の権限を取得しました