#google-apps-script #web-applications #google-oauth #google-sheets-api #service-accounts
#google-apps-script #веб-приложения #google-oauth #google-sheets-api #сервисные учетные записи
Вопрос:
У меня есть сайт Google, который просматривают сотни людей в день в пределах моего домена.
Я встроил в это множество веб-приложений Google Script, которые обращаются к электронной таблице и отображают данные в виде вывода HTML.
Моя проблема в том, что запуск сценариев от моего имени не сможет обрабатывать сотни одновременных пользователей, обращающихся к нему из-за одновременных вызовов квот Google.
Я не могу запускать скрипты от имени пользователей, потому что я бы предпочел, чтобы всем им не приходилось вручную авторизовывать каждый скрипт.
Мы создали учетную запись службы с доступом к API Sheets. Мне нужна помощь в использовании учетной записи службы для авторизации всех сценариев для всех пользователей в домене.
Вот веб-приложение Script, которое мне нужно авторизовать:
function doGet()
{
var value = SpreadsheetApp.openById(id).getSheetByName(name).getRange(2, 1).getValue();
value = CreateHtml(value);
return HtmlService.createHtmlOutput(value);
}
Код, который я нашел в Интернете, я не уверен, как адаптировать это для решения моей проблемы.
У меня уже есть JSON с соответствующими ключами и информацией о пользователе, но я понятия не имею, каким должно быть хранилище свойств, параметры или области видимости
function getOAuthService()
{
return OAuth2.createService("Service Account")
.setTokenUrl('https://oauth2.googleapis.com/token')
.setPrivateKey(JSON.private_key)
.setIssuer(JSON.client_email)
.setSubject(JSON.user_email)
.setPropertyStore(PropertiesService.getScriptProperties())
.setParam('access_type', 'offline')
.setScope('https://www.googleapis.com/auth/drive');
}
Таким образом, код взят с того же сайта, что и приведенный выше код. Я не знаю, нужно ли мне что-либо с этим делать или нет.
function getUserFiles()
{
var service = getOAuthService();
Logger.log(service.hasAccess());
if (service.hasAccess())
{
var url = 'https://www.googleapis.com/drive/v2/files?pageSize=1'
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' service.getAccessToken()
}
});
}
}
function reset()
{
var service = getOAuthService();
service.reset();
}