17

使用 Firebase Google 用户身份验证时,如果用户已经授权应用程序并且仅登录到一个 Google 帐户,则用户会立即登录。

有没有办法强制出现“选择帐户”对话框,以便用户有机会登录到不同的 Google 帐户或创建一个新帐户?

据我所知,货币用户必须从 Google.com 手动注销当前的 Google 帐户(或登录到 > 1)才能显示对话框。

4

5 回答 5

23

您可以强制选择具有“提示”提供程序参数的帐户。

var googleAuthProvider = new firebase.auth.GoogleAuthProvider();
googleAuthProvider.setCustomParameters({
   prompt: 'select_account'
});
firebase.auth().signInWithRedirect(googleAuthProvider)

使用 Firebase JavaScript SDK v4.1.2 测试

于 2017-07-08T15:29:30.527 回答
3

您应该明确退出 Google:

Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(status -> {
    mFirebaseAuth.signOut();
});

在这里找到了解决方案

于 2016-10-26T17:43:16.017 回答
1

在我下面的代码中,谷歌登录按钮每次都会提示选择帐户...

public class MainActivity extends AppCompatActivity {

Button btn_signOut;
private GoogleSignInClient mGoogleSignInClient;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn_signOut = findViewById(R.id.btnSignOut);

    btn_signOut.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            signOut();
        }
    });

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
}

private void signOut() {
    mGoogleSignInClient.signOut()
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    finish();
                }
            });

}

}

于 2018-07-04T17:14:18.733 回答
1

我试图弄清楚同样的事情。根据一些 Google 文档,您似乎可以使用“提示”命令(“无”、“选择帐户”或“同意”)强制帐户选择器:

强制谷歌帐户选择器

...但是似乎无法在 Firebase 的任何身份验证方法(特别是authWithOAuthRedirectauthWithOAuthPopup)中设置“提示”值。

你曾经能够弄清楚吗?

于 2015-11-24T21:08:43.973 回答
0

使用这种方式退出。

 Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new
 ResultCallback<Status>()
                 {
                     @Override
                    public void onResult(@NonNull Status status)
                     {
                         mAuth.signOut();

                    }

                 });
于 2017-01-25T10:39:52.230 回答