【问题标题】:Backend server: how to retain FirebaseApp instance?后端服务器:如何保留 FirebaseApp 实例?
【发布时间】:2018-12-30 05:00:47
【问题描述】:

我一直在尝试将 Firebase Admin SDK 实现到我们在 JAVA 上运行的后端服务器中。我的问题的来源是这段代码,由谷歌提供:

FileInputStream serviceAccount = new FileInputStream("path/to/serviceAccountKey.json");

FirebaseOptions options = new FirebaseOptions.Builder()
    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

我已经对其进行了测试并将其正确集成到我的代码中。但是,我不喜欢似乎需要将 serviceAccountKey.json 留在服务器中才能使用 Admin SDK。

我有两个简单的问题要问你们:

  1. 有没有办法让我不必将敏感信息 (serviceAccountKey.json) 存储在服务器中(因为它可能被逆向工程)?
  2. 如果我使用自己的 MySQL 数据库,是否需要 .setDatabaseUrl(...)? Firebase 在他们的服务器上对我有效的唯一数据库是我的用户群,因为我使用 Firebase 身份验证。我将 UID 存储在自己的数据库中以引用用户。

【问题讨论】:

    标签: java firebase google-admin-sdk firebase-admin


    【解决方案1】:
    1. 是的,有其他方法可以加载 Admin SDK 所需的配置,Hiranya Jayathilaka 在this post 中提到了这一点:

      您可以创建一个类似于下面的 JSON 文件

      {  
          "databaseURL": "https://database-name.firebaseio.com",
          "projectId": "my-project-id",
          "storageBucket": "bucket-name.appspot.com"
      }
      

      然后在您的服务器中创建一个名为FIREBASE_CONFIG 的环境变量,并将其设置为指向 JSON 文件。

      那么你只需要不带参数地调用FirebaseApp.initializeApp()

    2. 顾名思义,该方法只需要指示实时数据库 URL。如果不使用,可以省略。

    【讨论】:

    • 谢谢。关于您的第一个答案:我相信我记得读过“存储桶”是 Firebase 中的一项付费功能。这是否意味着我需要为服务付费才能使用此方法?很抱歉我必须问这个问题,但是:什么是环境变量?我无法理解如何正确调整这段代码。
    • Buckets 用于 Firebase 的云服务(如 Storage 和 Firestore)。但由于您只使用 Firebase 身份验证,因此您无需担心。
    • 环境变量是存储在您的服务器上的变量。由于它是环境的一部分,因此它的暴露方式与服务器暴露 json 文件的方式不同。所以把你的配置信息放在那里会更安全。您可能想在您的服务器文档或互联网上查看如何设置环境变量。只需执行快速谷歌。例如,如果您使用的是 Tomcat 服务器,请 google:“如何在 Tomcat 上设置环境变量?”
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多