使用Google Contacts API 3.0版和NodeJS'Passport同步联系人

Mer*_*erc 5 sync google-api node.js oauth-2.0 passport.js

我使用的是护照,并希望使用Google Contacts API 3.0版将Google通讯录与我的应用程序同步(这会突然变得有用10倍).

有人这样做过吗?如果是这样,你有一些示例代码吗?是否可以使用护照身份验证使其全部正常工作?

Far*_*hat 17

这有两个部分,授权,然后是实际请求.

它基本上使用OAuth2协议,您可以将客户端重定向到带有范围的google url(您必须至少https://www.google.com/m8/feeds在您的范围内能够读取和写入联系人)和您的客户端ID/secret(通过注册您的应用来获取它们.)谷歌将使用URL上的访问令牌重新定向用户.

您不需要自己执行此操作,因为有不同的模块已经执行此操作:

  • 护照谷歌-的OAuth

    这很容易,假设你已经使用了护照,这可能就是你想要的.它由passportjs的作者撰写.只需按照其中的示例操作OAuth 2.0策略即可.请注意,您需要在调用时添加正确的范围passport.authenticate('google', ...).该模块获取令牌后,将获取用户配置文件,因此您必须拥有以下3个范围之一:

    passport.authenticate('google', { scope: [ // One of the next three `auth` scopes are needed.
        'https://www.googleapis.com/auth/userinfo.profile',
        'https://www.googleapis.com/auth/userinfo.email',
        'https://www.googleapis.com/auth/plus.login',
        'https://www.google.com/m8/feeds'
    ] }),
    
  • googleapis

    这个模块由谷歌官方支持并由谷歌员工创建.您可以使用它进行身份验证,但遗憾的是它不支持包含谷歌联系人的gData.您可以查看示例以了解如何获取令牌.您只需要m8/feeds使用此模块的范围,如果您不想获取用户配置文件,则无需其他模块.

  • GDATA-JS

    这是一个不受欢迎的非维护模块,但它比前两个模块更轻量级.它可能需要一点点抛光.我建议也阅读理解api权利的来源.

一旦你获得了令牌,那么你可以选择稍微更容易的部分,发出请求并获取数据.

如果你阅读文档,它实际上非常容易.例如,要获取所有联系人(几乎全部,它是分页的),您需要向此URL发出GET请求:

https://www.google.com/m8/feeds/contacts/default/full?alt=json&oauth_token=THE_ACCESS_TOKEN
Run Code Online (Sandbox Code Playgroud)

同样,有许多模块可以帮助您.

  • 谷歌的联系人
  • 节点GDATA
  • gdata-js阅读源代码以了解它的api.实际上很简单:

    var client = require('gdata-js')(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET);
    client.setToken({ access_token: accessToken, refresh_token: refreshToken });
    client.getFeed('https://www.google.com/m8/feeds/contacts/default/full', function (err, result) { ... });