Home > Net >  Firebase Storage emulator does't support getSignedUrl
Firebase Storage emulator does't support getSignedUrl

Time:09-24

I have the line

onst [url] = await blob.getSignedUrl({ action: 'read', expires: Date.now()   60 * 1000, contentType: mimetype })

When I run my unit-tests with the Firebase storage emulator I got the error:

Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information

How can I use getSignedUrl with Firebase emulator?

CodePudding user response:

When using a blob signed url, use service account credentials instead of the default ADC. Having been said that, you have two options:

  1. You can create a service account that will use the command using the Cloud SDK: gcloud iam service-accounts keys create FILE_NAME.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com; which you can use to call Firebase server APIs from your app server or trusted environment. After creating your service account, you must initialize with a service account key file.

Here's an example java code for initializing:

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);

You can also check the Firebase Service Accounts to help you identify which service account you will use in your project.

  1. Another option is to set the service account key in an environment variables.

For Linux or macOS: export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Example is: export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

For Windows (using powershell): $env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Example is: $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

Just note that this variable only applies to your current shell session, so if you open a new session, set the variable again.

  • Related