omn​​iauth google_oauth2 authhash中不存在配置文件图像

时间:2013-04-08 14:32:20

标签: ruby-on-rails-3 omniauth user-profile

这是用omniauth.rb和初始化程序编写的。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2,ID,SECRET,
  {
  :approval_prompt => '',
  :scope => 'http://gdata.youtube.com,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/userinfo.profile'
  }

返回的auth哈希在“info”中没有IMAGE元素,为什么??????????

在下面的HASH中用x替换原始信息

*********************
--- !ruby/hash:OmniAuth::AuthHash
provider: google_oauth2
uid: 'xxxxxxxxxxxxxxxxxxxx' 
info: !ruby/hash:OmniAuth::AuthHash::InfoHash
  name: xxxx xxx 
  email: xxxxxxxxxx 
  first_name: xxxxxx
  last_name: xxxxxxx 
credentials: !ruby/hash:Hashie::Mash
  token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
  expires_at: 1365434778
  expires: true
extra: !ruby/hash:Hashie::Mash
  raw_info: !ruby/hash:Hashie::Mash
    id: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx' 
    email: xxxxxxxxxx.xxx@gmail.com 
    verified_email: true
    name: xxxx xxxx 
    given_name: xxx 
    family_name: xxx 
    link: https://plus.google.com/xxxxxxxxxxx 
    gender: male
    locale: en
*********************

我想要个人资料图片,我做错了什么?

也尝试了,

{:scope => 'userinfo.email,userinfo.profile'}

不工作!!

1 个答案:

答案 0 :(得分:0)

不确定该范围正在做什么,但我刚刚解决了获取谷歌信息的问题。 该信息是实际的params发送到rails,还是保存的用户哈希?

如果不是您登录的实际参数,您可以使用:

# sessions_controller.rb
raise env["omniauth.auth"].to_yaml

这将向您显示Google发送给您的所有内容。

如果是用户,并且如果您按照Railscasts跟我一样,那么检查您是否创建了一个字段来保存图片,并且您已设置字段以保存来自哈希值。我这样做了:

# sessions_controller.rb
def create
  user = User.from_omniauth(env["omniauth.auth"])
  user.image = env["omniauth.auth"]['info']['image']
  user.save
  session[:user_id] = user.id
  redirect_to root_url, :notice => "Signed in!"
end

如果那不是你需要的,你能更具体一点吗?