我使用 OAuth2 设置了 youtube 登录,并且在成功注册用户后,我想将用户的性别和位置保存在数据库中。
检查 OAuth 文档https://developers.google.com/accounts/docs/OAuth2Login#userinfocall 您可以看到您可以访问用户的性别和位置以及姓名、电子邮件和他们的个人资料图片等信息。
下面是我将用户信息保存到数据库的代码
用户.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
这获得了以下权限