无法将 Gmail 联系人与 Node.js 中的 passport-google-oauth 同步

Unable to sync Gmail contacts with passport-google-oauth in Node.js

我是 passport.js 的新手。 我正在使用它来进行身份验证并获取 Gmail contacts,为了获取联系人,我需要传递 scopehttps://www.google.com/m8/feeds。但除了个人资料详细信息外,我没有获得联系人列表。

这是我的代码:

 //register with google
    app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email','https://www.google.com/m8/feeds'] }));

    // the callback after google has authenticated the user
    app.get('/auth/google/callback', passport.authenticate('google', {
            successRedirect : '/user/dashboard',
            failureRedirect : '/register.html'
        })); 

还有我的 passport.js 代码:

    passport.use(new GoogleStrategy1({
    consumerKey: config.auth.googleAuth.clientID,
    consumerSecret: config.auth.googleAuth.clientSecret,
    callbackURL: config.auth.googleAuth.callbackURL
  },
  function(token, tokenSecret, profile, done) {
    console.log(profile);
    return done(err, user);
  }
));

当我打印 profile 时,我得到的只是用户详细信息,而不是 contact list。 我不知道,我为得到它做了什么。 任何帮助将不胜感激。

谢谢。

下面这些步骤是用来获取Gmail contacts

1- 要与任何 Google API 通信,我们需要在 Google console

上创建一个帐户

2- 之后创建一个项目,我们要与 Google API 通信,创建项目后 Google 提供 secret keyclient key用于与 Google 通信。每当我们的应用程序尝试与任何 Google API.

进行通信时,都需要这些密钥

3- 要获取 Gmail 联系人,Google 提供 https://www.google.com/m8/feeds/contacts/default/full?alt=json&oauth_token=xxxxxx

4- 我们只需要调用这个 API 来获取联系人,这个 API 在通信之前需要一些凭证。

5- 用户必须使用 Google 登录并拥有 API 用于获取用户联系人的令牌。

6- 通常我们更喜欢 passport Google strategy 登录 Google。而我们一半的事情是由 Passport.js 完成的,比如使用 Google 和令牌进行身份验证。

7- 当用户使用 Google 登录时,Passport.js 充当成功登录的中间件,在此期间,passport 提供当前用户的令牌。那一次我们打电话给联系人 API https://www.google.com/m8/feeds/contacts/default/full?alt=json&oauth_token=xxxxxx

而且我们很容易获得令牌,Google 创建的令牌将在一小时后过期,但我们不必担心,因为 passport 内部提供了 Google 提供的新令牌。

希望它对你有用。


更新

一起玩REST API

Get all the contacts 通过使用 REST call

使用request模块请求HTTP调用

request.get({
    url: 'https://www.google.com/m8/feeds/contacts/default/full',
    headers: {
        'Authorization': 'Bearer <Your access token>',
        'Content-Type': 'application/json'
    },
    qs: qs,//Optional to get limit, max results etc
    method: 'GET'
    }, function (err, response, body) {

   });