Si vous travaillez sur un Firebase projet, vous pouvez créer signé Url dans un Nuage de Fonction sans inclure d'autres bibliothèques ou le téléchargement des informations d'identification d'un fichier. Vous avez juste besoin d'activer l'API IAM et ajouter un rôle à votre compte de service (voir ci-dessous).
Initialiser l'administrateur de la bibliothèque et obtenir une référence de fichier comme vous le feriez normalement:
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp(functions.config().firebase)
const myFile = admin.storage().bucket().file('path/to/my/file')
Vous générez ensuite signé avec URL
myFile.getSignedUrl({action: 'read', expires: someDateObj}).then(urls => {
const signedUrl = urls[0]
})
Assurez-vous que votre Firebase compte de service a les autorisations nécessaires pour exécuter cette
- Aller à l'API de Google console et activer l'API IAM (https://console.developers.google.com/apis/api/iam.googleapis.com/overview)
- Toujours dans l'API console, allez dans le menu principal, "IAM et administration" -> "IAM"
- Cliquez sur modifier pour les "App Engine compte de service par défaut" rôle
- Cliquez sur "Ajouter un autre rôle", et d'ajouter celui qui est appelé "Compte de Service de Jeton de Créateur"
- Économisez et attendez une minute pour que les modifications se propagent
Avec la vanille, Firebase config, la première fois que vous exécutez le code ci-dessus, vous obtiendrez une erreur d'Identité et Access Management (IAM) de l'API n'a pas été utilisé dans le projet XXXXXX avant ou il est désactivé.. Si vous suivez le lien dans le message d'erreur et activer l'API IAM, vous aurez une autre erreur: Permission iam.serviceAccounts.signBlob est nécessaire pour effectuer cette opération sur le compte de service mon-service-compte. L'ajout du Jeton Créateur rôle résout ce deuxième problème d'autorisation.