【发布时间】:2018-06-19 07:59:59
【问题描述】:
我想让用户使用他们的gmail 连接到我的node.js server。我在Google Developers Console 中创建了一个项目。然后使用以下代码:
const express = require('express');
const google = require('googleapis');
const googleAuth = require('google-auth-library');
const credentials = require('../link/of/some/file.json'); // google credential
let clientSecret = credentials.web.client_secret;
let clientId = credentials.web.client_id;
let redirectUrl = credentials.web.redirect_uris[0];
const SCOPES = [
'https://mail.google.com/',
'https://www.googleapis.com/auth/gmail.modify',
'https://www.googleapis.com/auth/gmail.readonly'
];
let auth = new googleAuth();
let oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
app.get('/connect', (req, res) => {
let authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
res.redirect(authUrl);
});
当/connect被调用时,它会重定向到谷歌页面来验证用户。用户授予他/她帐户的访问权限后,google 会自动调用以下 api 并带有 code 查询参数:
app.get('/auth/callback', (req, res) => {
// 'req.query.code' is provided by google
return oauth2Client.getToken(req.query.code, (err, token) => {
// token value:
/*
{
access_token: 'ya29.Gls2Ba_rXEA5EoBaFH5bPdDDzgaSWOtb0GSJcnaTP47Jh7HwHdF2ZJZOlQaCJBC5wjpq-sOLBVlIM9L8BMslVyHw22nveU0MwQ4iJPTq5vkjXDeitqtoYH8JO83w',
refresh_token: '1/S0C3w-8vnqcrGE4Z2mSW9ctYkaitVuZquBSJ0WJJHUs',
token_type: 'Bearer',
expiry_date: 1514897380473
}
*/
});
});
现在,我的问题是,在上面的令牌值中,我无法理解如何从该令牌中获取 gmail 地址。我错过了什么???
有什么建议吗?提前致谢。
【问题讨论】:
标签: node.js