java - 谷歌使用 Firebase 登录时的唯一 ID

标签 java android firebase firebase-authentication

我创建了一个具有多个登录选项的应用程序,例如电子邮件和密码或使用谷歌帐户。

每次用户登录时,我都会保存一些相关数据,例如帐户创建数据、昵称等。

我将其存储在我的 Firebase 数据库中的以下路径中:

Users(集合)-> auth.getuid(具有唯一id的文档)-> UserData(集合)->一些字段

因此,当我使用电子邮件和密码登录并进行身份验证时,我可以使用 auth.getid 获得唯一 ID .通过这种方式,我可以确保不同用户不会有 2 个相同的文档。

现在,如果我通过以下方式使用谷歌登录:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RequestSignInCode){

        GoogleSignInResult googleSignInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

        if (googleSignInResult.isSuccess()){

            GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount();
            FirebaseUserAuth(googleSignInAccount);

            FirebaseFirestore db = FirebaseFirestore.getInstance();

            Map<String, Object> user = new HashMap<>();
            user.put("username", googleSignInAccount.getEmail());
            user.put("email",googleSignInAccount.getEmail());
            user.put("dateCreated", FieldValue.serverTimestamp());

            db.collection( "Users" ).document(auth.getUid()).collection( "UserData" ).add( user );

            Intent intent = new Intent( SignInActivity.this, DiscoverActivity.class );
            startActivity(intent);
            finish();
        }

    }
}

使用 google 登录时是否有与 auth.getuid 等效的东西,以便我可以为该用户创建一个唯一的文档?

或者更好的是,我还能以某种方式使用 auth.getID 吗?因为如果在我的所有代码中,当我使用电子邮件 + 密码登录时,我可以使用 auth.getuid 进行查询,现在我将无法并且需要基于 some google.id 创建一个单独的查询?

谢谢

最佳答案

任何 Firebase 身份验证用户都有一个 UID,您可以使用它来识别该用户。他们使用哪个提供商登录并不重要(电子邮件/密码、谷歌或任何其他)。当您允许同一用户与不同的提供商签名时,此 UID 甚至可以工作,并且您 link those accounts .

关于java - 谷歌使用 Firebase 登录时的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58792775/

相关文章:

java - 使用本地模拟器测试 PubsubIO 读取

java - Unix 上的自定义服务,带有 update-rc.d + LOG?

java - 学术合作的开源平台

android - 更新android sdk权限错误

Android:以编程方式在自定义 View 中设置 match_parent

swift - Firebase 重复单元格

java - 如何映射 getter setter 类的对象?

java - 用于 SMS 的 Twilio 与谷歌语音 API

firebase - 文档在 Firestore 中被删除后出现

swift - 如何在 Swift 中将 "add"时间转为 firebase 时间戳?