使用服务帐户在Node.js中获取我的Google帐户的联系人

时间:2019-01-16 14:26:36

标签: node.js authentication google-contacts google-people

在我的项目中,我试图使用Google People API从我的私人google帐户访问Google通讯录数据(读写访问权限)。我想强调一下,该项目仅适用于单个Google帐户。我的主要问题是对请求进行身份验证并获取数据。

我已经安装了googleapis客户端库。然后,使用Credentails标签下的Google API控制台,创建了一个新的Service Account,我得到了一个包含client_emailprivate_key和其他身份验证所需数据的json文件。接下来,我尝试设置所有内容

const {google} = require('googleapis');
const contacts = google.people('v1');
const scopes = [
    'https://www.googleapis.com/auth/contacts',
    'https://www.googleapis.com/auth/contacts.readonly',
];
const privateKey = require('app/config/private-data.json'); // JSON that contains `client_email`, `private_key`
router.get('/googleapis-test', (req, res, next) => {
    const auth = new google.auth.JWT(privateKey.client_email, null, privateKey.private_key, scopes);
    contacts.people.connections
        .list({
            auth,
            resourceName: 'people/me',
            pageSize: 10,
            personFields: ['names'],
        })
        .then((response) => {
            return res.send(response.data);
        })
        .catch(next);
});

在我的私人google帐户中,我有2000多个联系人,但不幸的是我得到的response.data对象为空。我以为发生了什么事,我创建的服务帐户没有对我的私有Google帐户联系人的权限/访问权限,因此我必须在这两个帐户之间提供某种链接以共享数据。

我在官方文档中发现建议将OAuth 2.0用于此类操作,但是由于我想访问API中的数据,因此没有接口可以填写Google提供的身份验证表单。

如果您能帮助我解决此问题,我将不胜感激。

0 个答案:

没有答案