如何在Ruby中使用OpenID访问Google通讯录

时间:2010-12-01 13:28:41

标签: ruby rubygems oauth openid

我正在使用devise来登录omniauth,authid。当用户登录时,我得到了

user_info: 
name: Riccardo Tacconi
last_name: Tacconi
email: email@gmail.com
first_name: Riccardo
uid: https://www.google.com/accounts/o8/id?id=xxxxxxxxx
provider: google_apps

我找到了一个插件:http://stakeventures.com/articles/2009/10/06/portable-contacts-in-ruby来获取Google通讯录。我只需要使用这种方法:

@client = PortableContacts::Client.new "http://www-opensocial.googleusercontent.com/api/people", @access_token

但我需要一个令牌。我只有uid。您是否知道如何获取访问令牌?没有任何关于访问谷歌的文档。

1 个答案:

答案 0 :(得分:3)

这个问题的答案相当复杂。 Pelle的Portable Contacts解析器依赖于他的oauth gem。您可以从omniauth / authid提供的任何内容手动构造token object(密钥/密钥对),但它可能是一些非常混乱的代码。

官方支持的Ruby的OAuth客户端是Signet。但是,Pelle的解析器只是为了与他的OAuth实现一起使用而设计,所以这里的故事大致相同。你可能能够从他的客户端中删除解析代码并将其与Signet结合,但和以前一样,如果你沿着这条路走下去,那么你的工作就已经完成了。

今天最容易做的就是使用oauth gem并接受Pelle强加给你的依赖树。

编辑:过了一段时间,google-api-client gem可能会为您提供此时所需的内容。在许多情况下,支持OAuth 1和2,并提供对certain Google APIs的基于发现的访问。不幸的是,Contacts API当前不在list上,但客户端仍然能够在不使用发现的情况下向API发出请求,尽管在这种情况下它需要更多手动(因为你需要传递它的HTTP请求)将授权,你基本上是自己解析)。