web和jvm之间的Firebase身份验证数据不匹配

Firebase Authentication data mismatch between web and jvm

本文关键字:身份验证 数据 不匹配 Firebase jvm 之间 web      更新时间:2023-09-26

我正在Firebase中试用身份验证组件。

A(我遇到一种情况,web客户端javascript代码firebase-app.jsfirebase-auth.js 3.3.0

firebase.auth().onAuthStateChangedfirebase.auth().currentUser

返回与jvm不同的预期登录用户值client[com.firebase/firebase-client-jvm"2.5.2"].jvm客户端返回null用户数据。

我的JVM客户端代码取自Firebase的快速入门指南。在里面JVM客户端,既没有调用onAuthStateChanged处理程序,也没有CCD_ 4是否返回任何数据。

我想知道差异在哪里。web客户端已初始化使用"codepairio.firebaseapp.com">.

  var config = {  ...     authDomain: “<my-firebase-app>.firebaseapp.com"
  };
  firebase.initializeApp(config);

B(java客户端已用"https://.firebaseio.com">。我使用这个URL,因为它在指南中指定并在这里提到。此外,如果你尝试若要使用".firebaseapp.com",您将收到一个错误:"IllegalStateException对于自定义firebase主机,在使用身份验证功能之前,必须首先设置身份验证服务器!">

所以有了这些,我们就。。。

   new Firebase("https://<my-firebase-app>.firebaseio.com”);

关于如何让他们观察到相同的真理来源,有什么想法吗?

===>[EDIT]

好的,我有更深入的了解。事实证明,我使用的是比最新的API(A(更老的firebase。

A(https://www.firebase.com/docs/android/guide/user-auth.html

B(https://firebase.google.com/docs/auth/server/

因此,如果我们查看Firebase关于如何处理用户的文档,我们会看到:

Firebase User对象表示已签名的用户的帐户直到您的Firebase项目中的一个应用程序。应用程序通常有很多注册用户,并且Firebase项目中的每个应用程序都共享一个用户数据库

Firebase User实例独立于Firebase Auth实例。这意味着您可以对不同的用户在同一上下文中,并且仍然调用他们的任何方法。

但i(如果我们的应用程序要处理多个用户,那么FirebaseAuth.getInstance().getCurrentUser()的概念就没有意义了。此外,FirebaseAuth.getInstance().getCurrentUser()方法甚至不存在。FirebaseAuth类文件(在com.firebase/fifirebase-client-jvm"2.5.2"中(没有反映文档。

$ javap -classpath ~/.m2/repository/com/google/firebase/firebase-server-sdk/3.0.1/firebase-server-sdk-3.0.1.jar com.google.firebase.auth.FirebaseAuth
Compiled from "FirebaseAuth.java"
public class com.google.firebase.auth.FirebaseAuth {
  public static com.google.firebase.auth.FirebaseAuth getInstance();
  public static synchronized com.google.firebase.auth.FirebaseAuth getInstance(com.google.firebase.FirebaseApp);
  public java.lang.String createCustomToken(java.lang.String);
  public java.lang.String createCustomToken(java.lang.String, java.util.Map<java.lang.String, java.lang.Object>);
  public com.google.firebase.tasks.Task<com.google.firebase.auth.FirebaseToken> verifyIdToken(java.lang.String);
  static com.google.api.client.json.JsonFactory access$000();
  static com.google.firebase.auth.internal.FirebaseTokenVerifier access$100(com.google.firebase.auth.FirebaseAuth);
  static {};
}

C(到目前为止,在服务器上使用Firebase的身份验证服务对我来说非常不透明。有人能澄清处理多个用户、获取登录用户列表、使用请求令牌验证用户等的语义吗?API在哪里工作?

我实际上从Firebase Support那里得到了关于这个问题的答案。事实证明,根据文档,服务器端(nodejs和java(在身份验证方面可用的功能只有i(创建自定义令牌和ii(验证ID令牌。到目前为止,还不支持处理用户或获取当前用户。

有关在服务器端创建和验证令牌的信息,可以参考本指南了解更多信息。您也可以查看这些帖子以了解更多信息。

  • 具有自定义身份验证的Firebase Java客户端
  • 是否仍然可以在Firebase 3中对令牌进行服务器端验证
  • https://firebase.googleblog.com/2013/03/where-does-firebase-fit-in-your-app.html

Hth