首页 > 解决方案 > Android FirebaseUI:用另一个谷歌账户登录很麻烦

问题描述

我目前正在检查 Firebase 身份验证的 FirebaseUI 产品,并且在使用它时遇到了一些问题。

我使用电子邮件/密码进行的第一次登录,我使用了 Gmail 地址和自定义密码(没有 Google 登录),我很惊讶它的效果如此之好。

后来我使用相同地址的 FirebaseUI 中的 Google 登录,它按预期“升级”到了 Google 登录。通过电子邮件/密码按钮使用该地址登录的进一步尝试在内部重新路由到 Google 登录,因此初始密码已过时,根本不需要密码,就像 Google 登录一样。这在某种程度上也是意料之中的,并且可能是可取的。

问题来了:现在,每当我退出并想使用另一个 Gmail 地址在 FirebaseUI 中通过 Google 登录时,我不能这样做,因为不再要求我选择一个已知的电子邮件地址到设备(最初显示了在手机上注册的所有三个 Gmail 地址)。它总是使用我使用的第一个地址登录。

如何指示 FirebaseUI 当用户单击 Google 登录时,应始终显示电子邮件地址选择对话框?

这是我正在使用的代码 https://firebase.google.com/docs/auth/android/firebaseui#sign_in

标签: androidfirebasefirebase-authenticationfirebaseui

解决方案


根据文档

登出

通过 AuthUI 提供的集成,注销用户是一个多阶段的过程:

  1. 用户必须退出 FirebaseAuth 实例。
  2. 必须指示 Smart Lock for Passwords 禁用自动登录,以防止自动登录循环阻止用户切换帐户。
  3. 如果当前用户使用 Google 或 Facebook 登录,则用户还必须使用该身份验证方法的关联 API 注销。这通常可确保用户在从身份验证方法选择器再次使用该身份验证方法时不会使用当前帐户自动登录,这也将阻止用户在同一提供商的帐户之间切换。

为了简化这个过程,AuthUI 提供了一个简单的 signOut 方法来封装这个行为。一旦完成所有必要的注销操作,该方法将返回一个标记为已完成的任务:

AuthUI.getInstance()
    .signOut(this)
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        public void onComplete(@NonNull Task<Void> task) {
            // user is now signed out
            startActivity(new Intent(MyActivity.this, SignInActivity.class));
            finish();
        }
    });

推荐阅读