Firebase身份验证-GoogleAuthProvider和FacebookAuthProvider取代了EmailAuthProvider

时间:2019-10-03 13:24:48

标签: android firebase firebase-authentication

步骤

  • 使用createUserWithEmailAndPassword创建用户
  • auth.signOut()
  • 使用FacebookAuthProvider或GoogleAuthProvider的用户signInWithCredential和createUserWithEmailAndPassword中使用的相同电子邮件
  • 抛出FirebaseAuthUserCollisionException(但这没有发生,而是signInWithCredential成功,并用Facebook或Google替换了提供程序

文档在下面

https://developers.google.com/android/reference/com/google/firebase/auth/FirebaseAuth.html#signInWithCredential(com.google.firebase.auth.AuthCredential)

代码

创建用户

auth.signInWithCredential(authCredential)
    .addOnSuccessListener {
       callBack.invoke(FirebaseAuthResult.Success)
    }.addOnFailureListener {
       val authResult = it.factoryExceptionAuthResult()
       callBack.invoke(authResult)
    }

signInWithCredential

implementation 'com.facebook.android:facebook-login:[5,6)'
implementation 'com.google.firebase:firebase-auth:19.1.0' 
implementation 'com.google.android.gms:play-services-auth:17.0.0'

        body {
            margin: 0;
            padding: 0;
        } 
        .items {
            border-radius: 10px;
            overflow: hidden;
            padding: 6px;
            border: 4px solid #000000;
            width: auto;
            display: inline-block;
            margin: 50px;
        }
        .items img {
            border-top-left-radius: 30px;
            border-top-right-radius: 30px;
            border-bottom-left-radius: 30px;
            border-bottom-right-radius: 30px;
        }

1 个答案:

答案 0 :(得分:0)

这是预期的行为。如果当前电子邮件不存在凭证类型(Facebook,Google等),则将创建该凭证类型并创建用户会话。它还会覆盖和删除其他凭据类型,例如密码,如果您不希望这样做,可以检查Link Multiple Auth Providers to an Account来了解如何链接和保留多个凭据提供者。

如果已经使用具有相同提供商类型的电子邮件创建了一个帐户,则抛出FirebaseAuthUserCollisionException错误,例如,如果有Google提供者帐户,并尝试登录具有该提供商名称的其他Google提供者相同的电子邮件但凭据不同。

如果只想使用电子邮件/密码登录用户,则应使用signInWithEmailAndPassword

您还可以使用fetchSignInMethodsForEmail来获取每封电子邮件的可用插入方法。