如何在没有访问令牌的情况下获取 Google 个联系人?

How to get Google contacts without access token?

已更新

access token 的帮助下我仍然得到了答案 :)

并且要提到它。

我正在使用 Google contacts API 获取 user 个联系人。

我正在使用 passport.js 通过 Google 登录并在 passport's access token 的帮助下我正在调用 API

https://www.google.com/m8/feeds/contacts/default/full?max-results=999999&alt=json&oauth_token=' + token

并获得所有 contacts

但我需要用其他东西代替 access token,比如 secret keyclient key.

因为每次我需要 log inGoogle 同步 contacts 如果用户添加 newly contact

我做了 Google 但没有得到任何解决方案。

任何想法都会对我有所帮助。

这是我获取联系人的代码

  var getGoogleContacts = function(token, userId) {
        var url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results=999999&alt=json&oauth_token=' + token;
        request(url, function(error, response, body) {
            if (error) {
                console.log(error);
            } else {
                var contacts = JSON.parse(body);
                saveGoogleContacts(userId, contacts);
            }
        });

    };

    /*Get contacts and store in user_contact table*/
    var saveGoogleContacts = function(userId, contacts) {
        var gContacts = [];
        contacts.feed.entry.forEach(function(contact, index) {
            if (contacts.feed.entry[index].gd$email) {
                gContacts.push([
                    null, null, contacts.feed.entry[index].title.$t, "'" + contacts.feed.entry[index].gd$email[0].address + "'",
                    1, userId, 0
                ]);
            }
        });
        if (gContacts.length > 0) {
            user.insertContacts(gContacts, function(err, result) {
                if (err) {
                    console.log(err);
                } else {
                    console.log('contacts saved: ' + result);
                }
            });
        }else{
            console.log('No records available');
        }
    }; 

我得到答案了。

正如我提到的,我正在使用 passport.js 登录 Google

并且在登录过程中 passport 默认提供 access tokenrefresh token refresh token 将是 null

如果你想得到refresh token你需要在验证过程中通过parameteraccessType:offline,像这样

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

在那之后你会得到 refresh token 并将它保存在任何永久的地方,因为它不会是 expire 并且可以在任何你想得到 access token[=29= 的时候使用]

要获得 access token 我正在使用 refresh-token 模块。

打完电话后 token 只需拨打电话 API 即可获取联系人。

像这样

var url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results=999999&alt=json&oauth_token=' + token;
        request(url, function(error, response, body) {
            if (error) {
                cb(error);
            } else {
                var contacts = JSON.parse(body);
                cb(null, contacts);
            }
        });
    }

就是这样。