Ruby on rails Can';不保存性别或位置

Ruby on rails Can';不保存性别或位置,ruby-on-rails,api,omniauth,Ruby On Rails,Api,Omniauth,由于我已经修改了我的范围,所以现在我请求正确的许可证,以便我可以将用户性别和位置保存到数据库 这是我的user.rb代码,其中保存了所有信息栏的性别和位置。遵循auth.info.name等设置的协议后,不会保存甚至检索性别或位置 def self.from_omniauth(auth) where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user| user.provider = auth.provi

由于我已经修改了我的范围,所以现在我请求正确的许可证,以便我可以将用户性别和位置保存到数据库

这是我的user.rb代码,其中保存了所有信息栏的性别和位置。遵循auth.info.name等设置的协议后,不会保存甚至检索性别或位置

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
这是我发送的范围

  Rails.application.config.middleware.use OmniAuth::Builder do
  provider :youtube, YOUTUBE_KEY, YOUTUBE_SECRET, { :scope => "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://gdata.youtube.com", access_type: 'offline', approval_prompt: '' }
end
路线

match 'auth/youtube/callback', to: 'sessions#create'

有人知道保存这两个值的正确方法吗?

这里的问题是,您在omniauth哈希中的错误位置查找该信息。如果在控制器操作的开头添加以下代码行:

render :text => "<pre>" + env["omniauth.auth"].to_yaml and return

你用的宝石是什么
omniauth-google-oauth2
omniauth-openid
?您是否在omniauth配置中定义了任何额外的权限或作用域?Hi Ashitaka,我已将作用域添加到问题中。这些显示了从google授予访问权限时的正确权限。我正在使用gem'omniauth openid'和gem'omniauth-google-oauth2'。您是否将该范围添加到
:google_oauth2
提供程序中?另外,您在谷歌登录时使用的确切url是什么?最后,为什么要使用
omniauth openid
gem?如果你想用OpenID登录,那很好,但是如果你只想用Google登录,你不需要这个gem。我在上面的问题中添加了完整的范围和登录url,并删除了OpenID gem,因为你是对的,它没有被使用。
user.gender = auth.extra.raw_info.gender
user.country = auth.extra.raw_info.locale