我使用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参数的额外范围来实现此目的。请记住包含没有用空格分隔的逗号的完整网址。
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
这获得了以下权限
答案 0 :(得分:2)
您可以在要求OAuth范围的位置发布代码吗?我的猜测是你没有要求配置文件范围。看看这个网站:
https://developers.google.com/oauthplayground/
如果您只是使用YouTube示例代码,则可能不会要求提供个人资料范围:
https://www.googleapis.com/auth/userinfo.profile
当你点击auth页面时,你可以判断你是否要求这个范围,因为auth页面会说:
“Google OAuth 2.0 Playground正在请求获得以下权限: 查看有关您帐户的基本信息 查看您的姓名,公开个人资料网址和照片 查看您的性别和生日 查看您的国家/地区,语言和时区“
我附上了截图。如果您没有看到这一点,请查看您配置范围的位置,并将其添加到要授权的OAUth范围列表中。