google-apps-script - 如何为我的谷歌工作区域中的所有用户执行脚本?(我是管理员,已创建服务帐户)
问题描述
我创建了一个为所有用户运行的脚本。我是管理员。
(脚本更新用户的联系人)。
我创建了一个具有联系人和 gmail 权限的服务帐户。
如何为每个用户运行脚本?
我不希望用户做任何事情。
解决方案
要在 Apps 脚本中使用服务帐户,您需要使用apps-script-oauth2 库
此外,要代表其他用户执行操作,您需要启用和使用域范围委派。
这允许服务帐户模拟任何域用户。创建模拟服务对象的代码如下所示:
function getService(user) {
return OAuth2.createService(SOME NAME)
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
.setPrivateKey(YOUR PRIVATE_KEY)
.setIssuer(YOUR CLIENT_EMAIL)
.setSubject(user) // the user you want to impersonate - you can call the function from a loop to perform calls for multiple users
.setPropertyStore(PropertiesService.getScriptProperties())
.setParam('access_type', 'offline')
.setScope(YOUR SCOPES);
}
- 然后在主函数中使用服务对象,您可以在其中使用 Urlfetch 请求和服务帐户令牌调用所需的 API:
var service = getService(user);
if (service.hasAccess()) {
Logger.log("service has access");
var url = "the endpoint you are interested in";
var headers ={
"Authorization": 'Bearer ' + service.getAccessToken()
};
var options = {
'headers': headers,
'method' : 'get',
'muteHttpExceptions': true
};
var response=UrlFetchApp.fetch(url, options).getContentText();
- 有关更多信息,请参阅此示例,该示例列出了所有域用户并循环遍历这些用户代表每个用户执行操作。
推荐阅读
- angular - 如果我们调用没有括号的函数,为什么 Typescript 不会抛出错误?
- jboss - 有什么方法可以将属性文件保留在 WildFly 的耳朵/罐子和模块之外
- c# - 如何使用嵌套和/或条件构建 mongo 聚合管道?
- reactjs - React 抛出 Invalid hook call 错误,这是为什么呢?
- php - 使用 PHP 以编程方式读取 RSS 提要的问题
- php - 无法启动会话:已启动
- r - 在由 R 中的变量表示的多个网页中搜索特定短语
- android - 如何在android中使用intent只选择sqlite db文件
- node.js - 无法使用 Node.js 从文件内容中确定文件类型
- java - 如何按属性的字母顺序对对象的 ArrayList 进行排序