【问题标题】:How do I use Firebase Authentication with a Java App Engine (standard) application?如何将 Firebase 身份验证与 Java App Engine(标准)应用程序一起使用?
【发布时间】:2018-04-21 17:36:03
【问题描述】:

是否有相对简单的教程和/或示例应用程序展示了使用 Java App Engine(标准)应用程序执行 Firebase 身份验证所需的所有步骤?我觉得我已经完成了大部分所需的操作,但我看到了以下错误:

java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. 

当我跑步时:

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();

然后我的目标是能够做到:

 FirebaseToken decodedToken = firebaseAuth.verifyIdTokenAsync(idTokenString).get();
 String userId = decodedToken.getUid();
 UserRecord userRecord = firebaseAuth.getUserAsync(userId).get();

请注意,Firebase 身份验证是我将在此应用程序中访问的唯一 Firebase API 或服务,因此我认为我不需要创建 Firebase 服务帐户和设置应用程序默认凭据。是这样吗?

实验表明我确实需要创建一个 Firebase 服务帐户并使用服务帐户 json 凭据文件。如果有什么方法可以避免这样做,我很乐意看到它。

提前致谢。

-马克

【问题讨论】:

    标签: java google-app-engine firebase firebase-authentication


    【解决方案1】:

    我也遇到了一个问题,它无法在类路径中获取凭证 json 文件。所以我使用了Levi's的解决方案更多细节如下:

    创建类:

    public class FirebaseCredentialsHelper {
    
          public String type= "";
          public String project_id= "";
          public String private_key_id= "";
          public String private_key= "";
          public String client_email= "";
          public String client_id= "";
          public String auth_uri= "";
          public String token_uri= "";
          public String auth_provider_x509_cert_url= "";
          public String client_x509_cert_url= "";
    
    }
    

    使用依赖:

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.5</version>
    </dependency>
    

    这就是你握手的方式。

    Gson gson = new Gson(); 
    InputStream stream = new ByteArrayInputStream(gson.toJson(new FirebaseCredentialsHelper()).getBytes(StandardCharsets.UTF_8));
    GoogleCredentials credentials = GoogleCredentials.fromStream(stream);
    FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(credentials).build();
    

    【讨论】:

      【解决方案2】:

      我也有类似的情况。经过几个小时的奋斗和阅读文档后,我发现了这一点:https://firebase.google.com/docs/admin/setup

      这些文档引用了它:https://firebase.google.com/docs/auth/admin/verify-id-tokens

      最后(就像您逃避的那样)我需要创建一个 Firebase 服务帐户。这使我能够关注https://firebase.google.com/docs/admin/setup 并在我的 Java 应用程序中初始化我的 Firebase 应用程序,并且我不再收到错误消息“名称为 [DEFAULT] 的 FirebaseApp 不存在。”。我现在可以验证 ID 令牌并通过“verifyIdTokenAsync”从 Firebase 获取 uid。

      关于您关于不需要服务帐户的最后一个问题,我相信如果您在 google 的 java 应用程序引擎上运行,您不需要服务帐户。

      下面是来自同一设置页面的一段代码,这意味着您所要求的确实可以完成。我没有在谷歌的 Java 应用引擎上运行,所以我无法确认。我希望这会有所帮助。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-10
        • 2021-06-14
        • 2021-01-03
        • 1970-01-01
        • 2022-08-08
        • 2016-03-01
        相关资源
        最近更新 更多