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

我正在使用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。 您是否知道如何获取访问令牌? 没有关于访问谷歌的任何文档。

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

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

今天最简单的事情可能就是使用oauth gem并接受Pelle强加给你的依赖树。

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