使用云函数时的 getSignedUrl

rai*_*n_3 1 google-cloud-storage firebase google-cloud-functions

我正在尝试获取图像 url,以便我可以src在 html 中传递它。我创建了函数并想发送 url 作为响应。我尝试了下面的方法,但我不断得到

错误:无法在没有client_email.

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

export const getPicURL = functions.https.onRequest(
    (request, response) => {
        const storageBucket = admin
            .storage()
            .bucket('gs://my-app.appspot.com');

        const fileName = 'my-app/pic1.jpg';
        const tomorrow = new Date(
            new Date().getTime() + 24 * 60 * 60 * 1000
        );

        const signedURL = storageBucket
            .file(fileName)
            .getSignedUrl({ action: 'read', expires: tomorrow });

        signedURL
            .then((data) => {
                response.send(data[0]);
            })
            .catch((err) => {
                console.log('My Error', err);
                response.sendStatus(500).send(err);
            });
    }
);
Run Code Online (Sandbox Code Playgroud)

我觉得我缺少配置步骤,但我不知道在哪里添加这些属性

rai*_*n_3 5

我遇到的问题是服务帐户。我没有使用正确的配置初始化应用程序。我可以在https://console.firebase.google.com/ >> 项目 >> 设置 >> 服务帐户 >> Firebase Admin SDK中找到详细信息

Firebase 控制台

Firebase 管理 SDK

我们不仅admin.initializeApp();需要执行以下操作

var admin = require("firebase-admin");

var serviceAccount = require("path/to/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://my-app.firebaseio.com"
});
Run Code Online (Sandbox Code Playgroud)