我有电话
onst [url] = await blob.getSignedUrl({ action: 'read', expires: Date.now() + 60 * 1000, contentType: mimetype })当我使用Firebase存储模拟器运行单元测试时,我得到了以下错误:
无法加载默认凭据。浏览到https://cloud.google.com/docs/authentication/getting-started以获得更多信息
如何在Firebase模拟器中使用getSignedUrl?
发布于 2021-09-24 06:13:11
当使用blob签名的url时,使用服务帐户凭据而不是默认的ADC。话虽如此,你有两种选择:
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com命令;您可以使用该命令从应用服务器或受信任的环境调用Firebase服务器app。创建服务帐户后,必须使用使用服务帐户密钥文件初始化。下面是用于初始化的示例java代码:
FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);您还可以检查消防基地服务账户,以帮助您识别您将在项目中使用的服务帐户。
对于Linux或macOS:导出GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH“
例如:导出GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json“
Windows (使用powershell):$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH“
例子是:$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json“
请注意,此变量仅适用于当前的shell会话,因此如果打开一个新会话,则再次设置该变量。
更新:
在Google平台环境中,例如云函数和App,在实例化过程中通常不提供keyFilename或凭据。在这些环境中,我们调用signBlob API来创建一个签名的URL。如前所述,这里。在这种情况下,所使用的服务帐户必须有Service Account Token Creator Role。
服务帐户令牌创建者角色允许模拟服务帐户来创建OAuth2访问令牌、签名blobs或签名JWT。初始化客户端时提供服务帐户。如果使用默认凭据,则确保Cloud服务帐户必须具有Service Account Token Creator Role,因为如果应用程序部署在GCP中,则调用signBlob API时必须使用它。
您可以进一步检查这个github发表评论。
https://stackoverflow.com/questions/69288015
复制相似问题