从youtube登录OAuth保存用户的性别和位置

我有使用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配置似乎不会将这些值保存到数据库中。 我错过了什么吗?

以下是我的应用程序要求的参数,没有任何范围。 在此处输入图像描述

UPDATE

我通过传入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 

这获得了以下权限 在此处输入图像描述

您可以在要求OAuth范围的位置发布代码吗? 我的猜测是你没有要求配置文件范围。 看看这个网站:

https://developers.google.com/oauthplayground/

如果您只是使用YouTube示例代码,则可能不会要求配置文件范围:

https://www.googleapis.com/auth/userinfo.profile

当你点击auth页面时,你可以判断你是否要求这个范围,因为auth页面会说:

“Google OAuth 2.0 Playground正在请求权限:查看有关您帐户的基本信息查看您的姓名,公开个人资料url和照片查看您的性别和生日查看您的国家/地区,语言和时区”

我附上了截图。 在此处输入图像描述 如果您没有看到这一点,请查看您配置范围的位置,并将其添加到要授权的OAUth范围列表中。