Firebase匿名身份验证相同参考对象问题

问题描述 投票:0回答:1

使用非匿名帐户(Google登录名,Facebook登录名等)登录时,我想在Firebase身份验证数据库中删除匿名帐户。

在下面的代码中,当用户打开应用程序匿名帐户创建成功,并且我将匿名FirebaseUser对象设置为firebaseUserAnonymous

但是当我每次使用Google帐户uidOlduidNew ID登录时都是相同的!

因此,我调试了代码,并看到onAuthStateChanged方法的FirebaseUser对象与设置的firebaseUserAnonymous对象相同!

如果(firebaseUserAnonymous != null && !uidNew.equals(uidOld))从未调用,因为新的firebaseUser对象和旧的firebaseUserAnonymous对象总是相同的引用

所以onAuthStateChanged方法在新的匿名登录名或Google登录名时总是使用相同的对象。

当用户使用google登录时,如何删除旧的FirebaseUser匿名对象?

private FirebaseUser firebaseUserAnonymous;

FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();

        if (firebaseUser == null) {//When first open or logout
            FirebaseAuth.getInstance().signInAnonymously();
        } else {
            String uidOld = firebaseUserAnonymous != null ? firebaseUserAnonymous.getUid() : null;
            String uidNew = firebaseUser.getUid();

            if (firebaseUserAnonymous != null && !uidNew.equals(uidOld)) {//Must be call when user login after google login for delete old anonymous account, but never calling
                firebaseUserAnonymous.delete();
            }

            if (firebaseUser.isAnonymous()) {
                firebaseUserAnonymous = firebaseUser;
            }
        }
    }
});
java android firebase firebase-authentication anonymous
1个回答
0
投票

但是当我每次使用Google帐户uidOlduidNew ID登录时都是相同的!

这是预期的行为。如果您匿名登录并在之后立即使用Google登录,则并不意味着将创建一个新的Firebase用户,实际上是一样的。因此,无论使用什么提供程序,都将始终具有相同的uid。因此,没有旧的“匿名”帐户需要删除。

编辑:

[当您匿名登录时,将生成FirebaseUser ID。当您使用Google登录时,会生成另一个FirebaseUser ID。但是,当您链接帐户时,匿名帐户将成为永久帐户,这意味着匿名帐户的uid用于Google帐户。

© www.soinside.com 2019 - 2024. All rights reserved.