感谢this other question我修改了我的范围,所以现在我要求正确的permisisons,以便我可以将用户性别和位置保存到数据库。
这是我的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'
有谁知道保存这两个值的正确方法吗?
答案 0 :(得分:2)
这里的问题是你在omniauth哈希中的错误位置寻找那些信息。如果将以下代码行添加到控制器操作的开头:
render :text => "<pre>" + env["omniauth.auth"].to_yaml and return
您将能够检查OAuth提供程序返回的哈希内容,并看到gender
和locale
位于哈希的extra
键内。
所以,这里的答案只是将两个违规行改为:
user.gender = auth.extra.raw_info.gender
user.country = auth.extra.raw_info.locale