繁体   English   中英

Firebase Android - 如何以不同用户身份登录(使用 Google 登录后)

[英]Firebase Android - how to login as different user (after signing in with Google)

编辑 - 我在写作时没有意识到的一个关键事情是,当您使用 Google 作为身份验证提供商时会发生这种情况

我已经设置了我的 Android 应用程序,以便我可以使用 Firebase 身份验证登录和注销。

但是当我登录时,我没有看到任何让我以不同用途登录的选项——它只是自动将我登录到我上次登录的同一个帐户。

如何切换用于登录的用户帐户?

我主要活动的代码:

    // Authentication stuff
    private lateinit var auth: FirebaseAuth
    private val btnSignIn: Button by lazy { findViewById(R.id.btnSignIn) }
    val signInLauncher = registerForActivityResult(FirebaseAuthUIActivityResultContract()) { res ->
        if (res.resultCode == RESULT_OK) {
            refreshSigninInfo()
        } else {
            showToast("Sign in failed - do you have internet connection?")
        }
    }
    private fun refreshSigninInfo() {  // Called in onCreate() 
        auth = FirebaseAuth.getInstance()
        auth.currentUser?.let {
            btnSignIn.text = "Signed in as ${it.email}\nTap to sign out"
            btnSignIn.setOnClickListener {
                auth.signOut()
                refreshSigninInfo()
            }
        } ?: run {
            btnSignIn.text = "Tap to sign in"
            btnSignIn.setOnClickListener {
                val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(arrayListOf(AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build()))
                    .build()
                signInLauncher.launch(signInIntent)
                // HERE, upon launch, this this should give the user 
                // the option of selecting a different sign-in account
                // but instead, if the user has previously signed in, 
                // it just directly signs the user in without the option 
                // to change account
            }
        }
    }

多亏了这个答案,终于明白了。

关键是退出:

AuthUI.getInstance().signOut(this).addOnCompleteListener {
    refreshSigninInfo()
}

而不是auth.signOut() 这样你就可以同时退出 Google 和 firebase 身份验证,所以下次你不会通过 Google 自动登录。

完整代码(在我的主要活动中 - 包括一些对按钮和你不会有的东西的引用):

    // Authentication stuff
    private lateinit var auth: FirebaseAuth
    private val textLoginInfo: TextView by lazy { findViewById(R.id.textLoginInfo) }
    private val btnSignIn: ImageButton by lazy { findViewById(R.id.btnSignIn) }
    val signInLauncher = registerForActivityResult(FirebaseAuthUIActivityResultContract()) { res ->
        if (res.resultCode == RESULT_OK) {
            refreshSigninInfo()
        } else {
            showToast("Sign in failed - do you have internet connection?")
        }
    }
    private fun refreshSigninInfo() {  // Called in onCreate()
        auth = FirebaseAuth.getInstance()
        auth.currentUser?.let {
            btnSignIn.setImageResource(R.drawable.logout_white_24dp)
            textLoginInfo.text = "Signed in: ${it.email}"
            btnSignIn.setOnClickListener {
                AuthUI.getInstance().signOut(this).addOnCompleteListener {
                    refreshSigninInfo()
                }
            }
        } ?: run {
            btnSignIn.setImageResource(R.drawable.login_white_24dp)
            textLoginInfo.text = "Not Signed in"
            btnSignIn.setOnClickListener {
                val signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAlwaysShowSignInMethodScreen(true)
                    .setAvailableProviders(arrayListOf(AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build()))
                    .build()
                signInLauncher.launch(signInIntent)
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM