使用Onia上的Omniauth检索Google个人资料图片3

时间:2011-08-12 18:06:49

标签: ruby-on-rails ruby-on-rails-3 authentication omniauth

我正在使用Omniauth开始一个新的Rails 3应用程序,通过Facebook,Twitter和Google进行身份验证。我可以轻松地从Facebook和Twitter获取用户的头像,但如果存在,则无法找到从Google检索它的方法。

这是我用来构建身份验证哈希的代码:

omniauth['user_info']['email'] ? @authhash[:email] =  omniauth['user_info']['email'] : @authhash[:email] = ''
omniauth['user_info']['name'] ? @authhash[:name] =  omniauth['user_info']['name'] : @authhash[:name] = ''
omniauth['uid'] ? @authhash[:uid] = omniauth['uid'].to_s : @authhash[:uid] = ''
omniauth['provider'] ? @authhash[:provider] = omniauth['provider'] : @authhash[:provider] = ''

在Twitter和Facebook上,下一行获取头像或设置为默认值(如果未提供):

omniauth['user_info']['image'] ? @authhash[:image] =  omniauth['user_info']['image'] : @authhash[:image] = 'avatar.jpg'

这不适用于Google,我找不到任何相关文档。

有什么想法吗?

非常感谢!

3 个答案:

答案 0 :(得分:7)

尝试'Omniauth Google OAuth2策略',其中提交声明:

  

在info中返回name,first_name,last_name,image,email:scope => 'userinfo.email,userinfo.profile'

您可以查看提交here

答案 1 :(得分:2)

是的,你可以得到图片,但我想它取决于你使用的版本。

我正在使用

  

rvm当前       红宝石1.9.3-P194

> gem list
oauth (0.4.6)
oauth2 (0.8.0)
omniauth (1.1.0, 1.0.3)
omniauth-facebook (1.4.1, 1.4.0)
omniauth-google (1.0.1)
omniauth-google-oauth2 (0.1.13)
omniauth-oauth (1.0.1)
omniauth-oauth2 (1.1.0, 1.0.3)
omniauth-twitter (0.0.12)

我到达这里的原因不同,原因是访问配置文件属性的命名约定与各种教程中的解释不同,因此我在完成登录时遇到错误。实际上在您的问题中你可能会发现你会遇到同样的问题。

问题是谷歌有不同的属性名称来自FB,Twitter等,所以你必须考虑到这一点。

要查找属性,我注释掉了do位,然后将响应转出。像这样。

elsif service_route == 'google_oauth2'
render :text => omniauth.to_yaml
return

这将输出您的Google个人资料详细信息,希望如下所示。

--- !ruby/hash:OmniAuth::AuthHash
provider: google_oauth2
uid: '1234567'
info: !ruby/hash:OmniAuth::AuthHash::InfoHash
  name: Your Name
  email: yourEmail
  first_name: firstname
  last_name: surname
  image: https://animage
credentials: !ruby/hash:Hashie::Mash
  token: aToken
  expires_at: 123
  expires: true
extra: !ruby/hash:Hashie::Mash
  raw_info: !ruby/hash:Hashie::Mash
    id: '123456'
    email: YourEmail
    verified_email: true
    name: YourName
    given_name: Name
    family_name: surname
    link: https://plus.google.com/blah
    picture: https://lh6.googleusercontent.com/blah blah
    gender: male
    birthday: ''
    locale: en-GB

正如您所看到的参数名称不同,请删除 user_info ,而不是信息

您还会注意到您有图片图片,所以虽然我没有尝试过,但我认为这是您的个人资料照片。

elsif service_route == 'google_oauth2'
    omniauth['info']['email'] ? email = omniauth['info']['email'] : email = ''
    omniauth['info']['name'] ? name = omniauth['info']['name'] : name = ''
    omniauth['uid'] ? uid = omniauth['uid'] : uid = ''
    omniauth['provider'] ? provider = omniauth['provider'] : provider = ''
    omniauth['info']['image'] ? image = omniauth['info']['image'] : image = ''

答案 2 :(得分:0)

我遇到了同样的问题,发现只是个人资料的图像不公开。我必须将设置从“仅对我可以聊天的人可见”更改为“对所有人可见”。然后图像开始出现。希望这有助于某人。