我有一个公共插件,该插件利用Google Apps脚本锁定服务来防止在进行写入之前先读取电子表格。
var lock = LockService.getDocumentLock();
var success = lock.tryLock(240000); // 4 minutes
if (!success) {
console.warn('Could not obtain lock after 4 minutes.');
return;
}
//perform some function then release lock
lock.releaseLock();
Run Code Online (Sandbox Code Playgroud)
我继续收到错误消息:
针对同一脚本的LockService操作过多。
最初,我认为此错误是“基于用户的”,并且每个用户的锁定服务操作数可能有一个配额,但是最近我开始发现过去几天中,针对30个以上的用户,此错误出现的频率更高。
每个用户或每个脚本的LockService操作数是否有限制?
如果是这样,限制是什么?
我没有在Google Apps脚本配额中看到对配额的任何引用
在LockService文档中也看不到对配额的任何引用
App Engine 的 Python 2.7 运行时有一种非常方便的方法来向另一个 App Engine 应用程序断言一个应用程序的身份。
如上面的链接所述,使用app_identity包的库google.appengine.api我能够获取并将其插入标头auth_token中urlfetch。收到请求时,我可以验证X-Appengine-Inbound-Appid标头信息。
据我了解urlfetch,该google.appengine.api包在 Python 3.7 运行时中不可用。
我的应用程序由多个 GAE 项目组成,因此我使用此方法来验证我的项目之间的 api 调用的身份(即,因此我不需要它来用于外部 API/服务)。在 App Engine 的 Python 3.7 运行时中执行此操作的推荐方法是什么?
我正在尝试使用单独的服务帐户(即不是默认服务帐户)在 Cloud Run 应用程序中初始化 Firebase Admin SDK。
文档建议:
import firebase_admin
from firebase_admin import credentials
cred = credentials.Certificate("path/to/serviceAccountKey.json")
firebase_admin.initialize_app(cred)
Run Code Online (Sandbox Code Playgroud)
但是,我想避免将机密打包到 Cloud Run 容器中,因此我从 Secret Manager 检索 json 文件,并尝试创建凭据,并将其传递到: firebase_admin.initialize_app(cred)
import firebase_admin
from google.cloud import secretmanager
from google.oauth2 import service_account
# Create credentials object then initialize the firebase admin client
sec_client = secretmanager.SecretManagerServiceClient()
name = sec_client.secret_version_path(GOOGLE_CLOUD_PROJECT_NUMBER, FIREBASE_SA_SECRET_NAME, "latest")
response = sec_client.access_secret_version(name)
service_account_info = json.loads(response.payload.data.decode('UTF-8'))
creds = service_account.Credentials.from_service_account_info(service_account_info)
firebase_admin.initialize_app(creds)
Run Code Online (Sandbox Code Playgroud)
收到错误:
ValueError:提供了非法的 Firebase 凭据。应用程序必须使用有效的凭证实例进行初始化。
任何提示表示赞赏。
我有两个Google表单,可将数据发送到单个电子表格中的两个标签中。
我已经设置了具有两个功能的脚本。我希望第一个函数在提交第一个表单时运行。并且,第二个函数在提交第二个表单时运行。
问题是:在设置触发器onformsubmit时,它不允许您指定哪种形式。
因此,无论何时填写第一个表格,它都会运行两个功能。
问题:如何限制仅在提交特定表单后才能运行的功能?
javascript triggers google-sheets google-apps-script google-forms
我有一个需要访问各种 Google 服务的附加组件,并在初始加载时请求以下访问权限:
我还有一个像我一样运行的网络应用程序(与附加组件相同的谷歌帐户),任何人都可以访问,包括匿名。webapp 尝试访问我认为我应该已经可以访问的表单。
网页应用:
function doGet(){
var form = FormApp.openById('');
var formId = form.getId();
var items = form.getItems();
return ContentService.createTextOutput("Form contains "+items.length+"items.");
}
Run Code Online (Sandbox Code Playgroud)
错误:
找不到具有给定 ID 的项目,或者您无权访问它。
题:
当加载项最初请求访问用户的云端硬盘时,这是否仅允许访问加载项或开发人员的 google 帐户?
我正在尝试设置服务以提供身份验证服务,以便外部应用程序可以向 Cloud Run 应用程序(在 Cloud Endpoints API 网关后面)发出请求。
我遵循了服务文档之间的 Cloud Endpoints身份验证,但是在尝试访问 Cloud Run 服务时我继续收到以下错误:
401:未配置 Jwt 颁发者
在 openapi 规范中,我设置了端点安全性和 securityDefinition:
/endpoint_1:
get:
...
security:
- service_account: []
securityDefinitions:
service_account:
authorizationUrl: ""
flow: "implicit"
type: "oauth2"
x-google-issuer: "<service_account_email>"
x-google-jwks_uri: "https://www.googleapis.com/robot/v1/metadata/x509/<service_account_email>"
x-google-audiences: "https://<cloud-run-service>-pjcfvhz2qq-uc.a.run.app"
Run Code Online (Sandbox Code Playgroud)
然后使用 ESPv2 Beta 将其部署到 Cloud Run,如Cloud Endpoints 文档所述。
部署完所有内容后,我尝试从本地计算机运行以下脚本以生成已签名的 jwt 并向 Cloud Run 服务发出请求:
import os
import json
import time
import requests
import google.auth.crypt
import google.auth.jwt
now = int(time.time())
expiry_length …Run Code Online (Sandbox Code Playgroud)