0

我使用 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

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

4

1 回答 1

2

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

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

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

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

当您点击 auth 页面时,您可以判断您是否要求此范围,因为 auth 页面会显示如下内容:

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

我附上了截图。在此处输入图像描述如果您没有看到此内容,请查看您在哪里配置您的范围并将其添加到 OAUth 范围列表以进行授权。

于 2013-01-14T15:15:50.167 回答