Я пытаюсь создать облачную функцию, основанную на NodeJS, которая использует доступ к делегированию по всему домену для использования метода API gmail.users.settings.delegates.list.
Я ищу решение который не использует ключ учетной записи службы JSON, вместо этого я хочу использовать учетные данные по умолчанию.
Я настраиваю свой локальный env для эмуляции облачной функции env с помощью этого запуска. json file
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch usersOnBehalfCheck",
"skipFiles": [
"<node_internals>/**"
],
"env": {
"GCP_PROJECT":"projectId",
"GOOGLE_APPLICATION_CREDENTIALS": "pathToJsonFile.json"
},
"program": "${workspaceFolder}/index.js"
}
]
}
Распечатка переменной GOOGLE_APPLICATION_CREDENTIALS
env в GCF кажется, что эта переменная вообще не существует, но я не понимаю, как лучше имитировать env GCF
Говоря об объекте auth, я обнаружил, что два способа:
Первый:
const gmailDWDAuth = new GoogleAuth({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
Второй:
const gmailDWDAuth = await google.auth.getClient({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
inputData.userPrimaryEmail
содержать действительный аккаунт GSuite в той же организации, что и сервисный аккаунт.
оба способа работают локально, но перестают работать, с ошибкой Bad Request
, когда я опубликовал GCF в GCP.
Может кто-нибудь помочь?
РЕДАКТИРОВАТЬ
через несколько часов я нашел этот пост говорить s об этом
Я изменил свой код, следуя его инструкции
Третий:
const DWDAuth = await google.auth.getClient({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
DWDAuth.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuth: DWDAuth }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuth })
Четвертый:
const DWDAuth = new GoogleAuth({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
const DWDAuthClient = await DWDAuth.getClient();
DWDAuthClient.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuthClient: DWDAuthClient }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuthClient })
как и прежде, все эти локально работает нормально, но я получаю неверный запрос в GCF