如何使用 Gmail 在 nodejs 服务器中连接我的 G-Suite API
How to connect my G-Suite in nodejs server using Gmail API
我想使用 Gmail API 在 nodejs 服务器中访问我的 G-Suite 帐户。
我知道我应该创建服务帐户并使用其凭据进行身份验证。
我尝试了很多示例和方法,但无法使其正常工作。
这是我最后一次尝试了。
returns 400 个错误请求。
代码:400,
错误:[
{
域:'global',
原因:'failedPrecondition',
消息:'Bad Request'
}
]
const {GoogleAuth} = require('google-auth-library');
const credentials = require('./sevice-account-credentials.json');
async function main() {
const clientEmail = credentials.client_email;
const privateKey = credentials.private_key;
if (!clientEmail || !privateKey) {
throw new Error(`
The CLIENT_EMAIL and PRIVATE_KEY environment variables are required for
this sample.
`);
}
const auth = new GoogleAuth({
credentials: {
client_email: clientEmail,
private_key: privateKey,
},
scopes: 'https://mail.google.com/',
});
const client = await auth.getClient();
const projectId = await auth.getProjectId();
const url = `https://www.googleapis.com/gmail/v1/users/my-gsuite@domain.co.il/labels/label_id`;
const res = await client.request({url});
console.log(res.data);
}
main().catch(console.error);
问题:
您没有冒充域中的任何帐户。这就是全域委托的要点:模拟/代表另一个帐户。
解决方案:
您必须通过在实例化 GoogleAuth
:
时提供 属性 clientOptions
来指定您希望服务帐户代表哪个帐户
clientOptions: { subject: "my-gsuite@domain.co.il" }
所以它会像:
const auth = new GoogleAuth({
credentials: {
client_email: clientEmail,
private_key: privateKey,
},
scopes: 'https://mail.google.com/',
clientOptions: { subject: "my-gsuite@domain.co.il" }
});
参考:
我想使用 Gmail API 在 nodejs 服务器中访问我的 G-Suite 帐户。 我知道我应该创建服务帐户并使用其凭据进行身份验证。 我尝试了很多示例和方法,但无法使其正常工作。
这是我最后一次尝试了。 returns 400 个错误请求。
代码:400, 错误:[ { 域:'global', 原因:'failedPrecondition', 消息:'Bad Request' } ]
const {GoogleAuth} = require('google-auth-library');
const credentials = require('./sevice-account-credentials.json');
async function main() {
const clientEmail = credentials.client_email;
const privateKey = credentials.private_key;
if (!clientEmail || !privateKey) {
throw new Error(`
The CLIENT_EMAIL and PRIVATE_KEY environment variables are required for
this sample.
`);
}
const auth = new GoogleAuth({
credentials: {
client_email: clientEmail,
private_key: privateKey,
},
scopes: 'https://mail.google.com/',
});
const client = await auth.getClient();
const projectId = await auth.getProjectId();
const url = `https://www.googleapis.com/gmail/v1/users/my-gsuite@domain.co.il/labels/label_id`;
const res = await client.request({url});
console.log(res.data);
}
main().catch(console.error);
问题:
您没有冒充域中的任何帐户。这就是全域委托的要点:模拟/代表另一个帐户。
解决方案:
您必须通过在实例化 GoogleAuth
:
clientOptions
来指定您希望服务帐户代表哪个帐户
clientOptions: { subject: "my-gsuite@domain.co.il" }
所以它会像:
const auth = new GoogleAuth({
credentials: {
client_email: clientEmail,
private_key: privateKey,
},
scopes: 'https://mail.google.com/',
clientOptions: { subject: "my-gsuite@domain.co.il" }
});