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

时间:2013-01-12 07:47:32

标签: ruby-on-rails api youtube-api oauth-2.0 omniauth

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

以下是我的应用程序要求的参数,没有任何范围。 enter image description here

更新

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

这获得了以下权限 enter image description here

1 个答案:

答案 0 :(得分:2)

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

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

如果您只是使用YouTube示例代码,则可能不会要求提供个人资料范围:

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

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

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

我附上了截图。enter image description here如果您没有看到这一点,请查看您配置范围的位置,并将其添加到要授权的OAUth范围列表中。