firebase / firebase-admin-go

Firebase Admin Go SDK
Apache License 2.0
1.12k stars 239 forks source link

FIREBASE_DATABASE_EMULATOR_HOST environment variable with IP address errors and exits application #574

Open Zakpak0 opened 11 months ago

Zakpak0 commented 11 months ago

[REQUIRED] Step 2: Describe your environment

[REQUIRED] Step 3: Describe the problem

Setting the FIREBASE_DATABASE_EMULATOR_HOST environment variable with an IP address errors and exit's the application.

Steps to reproduce:

Create an application using the firebase sdk for golang Load FIREBASE_DATABASE_EMULATOR_HOST={IP_ADDRESS} into your environment The application should crash image

Relevant Code:

package firebase

import (
    "context"
    "log"
    "os"

    fb "firebase.google.com/go/v4"
    "google.golang.org/api/option"
)

func Firebase(ctx context.Context) *fb.App {
    db := os.Getenv("DATABASE_URL")
    if db == "" {
        log.Fatal("Error loading DATABASE_URL from .env file")
    }
    pid := os.Getenv("PROJECT_ID")
    if pid == "" {
        log.Fatal("Error loading PROJECT_ID from .env file")
    }
    config := &fb.Config{
        DatabaseURL: db,
        ProjectID:   pid,
    }
    env := os.Getenv("APP_ENV")
    var opt option.ClientOption
    if env == "development" {
        cred := os.Getenv("FIREBASE_CONFIG")
        if cred == "" {
            log.Fatal("Error loading FIREBASE_CONFIG from .env file")
        }
        opt = option.WithCredentialsFile(cred)
    }
    if value := os.Getenv("FIRESTORE_EMULATOR_HOST"); value != "" {
        log.Printf("Using Firestore Emulator: %s", value)
        app, err := fb.NewApp(ctx, config, opt)
        if err != nil {
            log.Fatalln(err)
        }
        return app
    } else {
        app, err := fb.NewApp(ctx, config)
        if err != nil {
            log.Fatalln(err)
        }
        return app
    }
}
JustinTrvz commented 8 months ago
config := &firebase.Config{
       ProjectID:     "<project-id>",
       DatabaseURL:   "localhost:9000/?ns=<project-id>",
}

You can try this as a workaround as long as the fix is not implemented.