![](/img/trans.png)
[英]How to check after login user is login through Facebook in firebase for ios swift?
[英]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.