#google-apps-script #oauth-2.0 #google-apps #google-admin-sdk #google-directory-api
#google-apps-script #oauth-2.0 #google-приложения #google-admin-sdk #google-directory-api
Вопрос:
Я прочитал все соответствующие страницы в документации Admin ADK Directory API и несколько вопросов по stackoverflow, и я все еще застрял.
Я являюсь суперадминистратором своего домена Google Apps, и я хочу, чтобы пользователи в моем домене могли создавать свои собственные группы Google. Я создал форму Google, в которой пользователь указывает имя и адрес электронной почты группы. Затем в таблице ответов Google Form есть триггер «При отправке формы», который вызывает мой код для создания группы.
Этот код работает, когда я запускаю createGroupTest()
из редактора сценариев. Он немедленно создает группу в моем домене Google Apps.
Этот код не работает, когда триггер «При отправке формы» запускает onFormSubmit(e)
функцию. Я получаю электронное письмо из catch(e)
высказывания Exception: Failed to authenticate for service: Groups
.
Кто-нибудь знает, что заставляет аутентификацию oauth работать из редактора сценариев, но не при вызове функцией onFormSubmit ?
function onFormSubmitTest() {
var t = new Date();
t = t.getTime();
onFormSubmit([t, "AAA Test Group " t], ["aaa.testgroup." t "@mydomain.com"], ["me@mydomain.com"]);
}
var consumerKey = "mydomain.com";
var consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
var domainName = "mydomain.com";
function onFormSubmit(e) {
var timestamp = e.values[0];
var groupName = e.values[1];
var groupEmail = e.values[2];
var owner = e.values[3];
owner = owner.split("@")[0];
var description = 'test';
var requestBody = {email: groupEmail, name: groupName, description: description};
var scope = "https://www.googleapis.com/auth/admin.directory.group";
var fetchArgs = googleOAuth_("Groups", scope);
fetchArgs.method = "POST";
fetchArgs.contentType = "application/json";
fetchArgs.payload = JSON.stringify(requestBody);
fetchArgs.muteHttpExceptions = true;
var url = 'https://www.googleapis.com/admin/directory/v1/groups?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
UrlFetchApp.fetch(url, fetchArgs);
}
function googleOAuth_(name,scope) {
var oAuthConfig = UrlFetchApp.addOAuthService(name)
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope=" scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey(consumerKey);
oAuthConfig.setConsumerSecret(consumerSecret);
return {oAuthServiceName:name, oAuthUseToken:'always'};
}
Комментарии:
1. Этот код все еще действителен? Требуется ли для этого просто ключ в консоли разработчика или требуется oauth2? Не могли бы вы дать несколько инструкций по этому поводу?
2. @Riccardo Да, это все еще действует в 2021 году и все еще используется в моем коде. Он использует библиотеку сценариев OAuth2 для приложений, которая активно поддерживается командой Google Apps Script .
googleOAuth_
был взят из этой библиотеки, но вам просто нужно добавить библиотеку, вам не нужно добавлять функцию в свой собственный код.
Ответ №1:
Я понял это: мне не удалось включить расширение домена в groupEmail
строку (потому что моя форма Google запрашивает у пользователя только имя электронной почты группы без расширения домена).