You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase匿名账号关联邮箱密码时提示提供商禁用,控制台可创建用户

Firebase匿名账号关联邮箱密码时提示提供商禁用的排查与解决

问题场景

在Android应用中,用户先以匿名身份使用,后续尝试将匿名账号与新邮箱/密码凭据关联时,Firebase身份验证抛出错误:

The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section. [ Please verify the new email before changing email]

但邮箱/密码登录提供商已在Firebase控制台启用,且通过控制台创建的邮箱/密码账号可正常登录应用。

关联账号的核心代码:

class AccountServiceImpl @Inject constructor(private val auth: FirebaseAuth){
    
    suspend fun linkAccount(email: String, password: String){
        val credential = EmailAuthProvider.getCredential(email, password)
        auth.currentUser!!.linkWithCredential(credential).await()
  }

}

Firebase Crashlytics捕获的错误堆栈:

Non-fatal Exception: com.google.firebase.auth.FirebaseAuthException: The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section. [ Please verify the new email before changing email. ]
   at com.google.android.gms.internal.firebase-auth-api.zzace.zza(com.google.firebase:firebase-auth@@22.2.0:39)
   at com.google.android.gms.internal.firebase-auth-api.zzadd.zza(com.google.firebase:firebase-auth@@22.2.0:21)
   at com.google.android.gms.internal.firebase-auth-api.zzact.zza(com.google.firebase:firebase-auth@@22.2.0:35)
   at com.google.android.gms.internal.firebase-auth-api.zzacv.zza(com.google.firebase:firebase-auth@@22.2.0:75)
   at com.google.android.gms.internal.firebase-auth-api.zzacc.zza(com.google.firebase:firebase-auth@@22.2.0:46)
   at com.google.android.gms.internal.firebase-auth-api.zzyz.zza(com.google.firebase:firebase-auth@@22.2.0:3)
   at com.google.android.gms.internal.firebase-auth-api.zzys.zza(com.google.firebase:firebase-auth@@22.2.0:2)
   at com.google.android.gms.internal.firebase-auth-api.zzadi.zza(com.google.firebase:firebase-auth@@22.2.0:15)
   at com.google.android.gms.internal.firebase-auth-api.zzadi.zza(com.google.firebase:firebase-auth@@22.2.0:64)
   at com.google.android.gms.internal.firebase-auth-api.zzacp.zza(com.google.firebase:firebase-auth@@22.2.0:99)
   at com.google.android.gms.internal.firebase-auth-api.zzyj.zza(com.google.firebase:firebase-auth@@22.2.0:37)
   at com.google.android.gms.internal.firebase-auth-api.zzyp.zza(com.google.firebase:firebase-auth@@22.2.0:8)
   at com.google.android.gms.internal.firebase-auth-api.zzadi.zza(com.google.firebase:firebase-auth@@22.2.0:20)
   at com.google.android.gms.internal.firebase-auth-api.zzadi.zza(com.google.firebase:firebase-auth@@22.2.0:64)
   at com.google.android.gms.internal.firebase-auth-api.zzacp.zza(com.google.firebase:firebase-auth@@22.2.0:54)
   at com.google.android.gms.internal.firebase-auth-api.zzyj.zza(com.google.firebase:firebase-auth@@22.2.0:29)
   at com.google.android.gms.internal.firebase-auth-api.zzyz.zza(com.google.firebase:firebase-auth@@22.2.0:11)
   at com.google.android.gms.internal.firebase-auth-api.zzyj.zza(com.google.firebase:firebase-auth@@22.2.0:84)
   at com.google.android.gms.internal.firebase-auth-api.zzyj.zzb(com.google.firebase:firebase-auth@@22.2.0:134)
   at com.google.android.gms.internal.firebase-auth-api.zzacb.zza(com.google.firebase:firebase-auth@@22.2.0:110)
   at com.google.android.gms.internal.firebase-auth-api.zzaas.zza(com.google.firebase:firebase-auth@@22.2.0:17)
   at com.google.android.gms.internal.firebase-auth-api.zzadf.run(com.google.firebase:firebase-auth@@22.2.0:2)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
   at com.google.firebase.concurrent.CustomThreadFactory.lambda$newThread$0$com-google-firebase-concurrent-CustomThreadFactory(CustomThreadFactory.java:47)
   at com.google.firebase.concurrent.CustomThreadFactory$$ExternalSyntheticLambda0.run(:4)
   at java.lang.Thread.run(Thread.java:919)

问题原因

错误信息的主提示有误导性,实际触发原因是:目标邮箱已被另一个Firebase账号绑定,且该账号的邮箱未完成验证。Firebase在此场景下错误复用了“提供商禁用”的提示文本。

解决方案

1. 处理邮箱状态

  • 若邮箱未注册:先调用createUserWithEmailAndPassword创建新的邮箱/密码用户,再执行匿名账号关联操作;
  • 若邮箱已注册:引导用户使用该邮箱密码登录,之后合并匿名账号与已登录账号;
  • 若邮箱已注册但未验证:先发送验证邮件给该邮箱,待用户完成验证后再进行关联。

2. 调整代码逻辑(含异常处理)

class AccountServiceImpl @Inject constructor(private val auth: FirebaseAuth){
    
    suspend fun linkAccount(email: String, password: String) {
        val credential = EmailAuthProvider.getCredential(email, password)
        try {
            auth.currentUser!!.linkWithCredential(credential).await()
        } catch (e: FirebaseAuthException) {
            when(e.errorCode) {
                "ERROR_EMAIL_ALREADY_IN_USE" -> {
                    // 邮箱已被占用,先登录该账号再合并
                    val loggedInResult = auth.signInWithCredential(credential).await()
                    loggedInResult.user?.credential?.let { userCredential ->
                        auth.currentUser!!.linkWithCredential(userCredential).await()
                    }
                }
                "ERROR_INVALID_EMAIL" -> {
                    // 处理邮箱格式错误
                }
                "ERROR_USER_NOT_FOUND" -> {
                    // 邮箱未注册,先创建用户再关联
                    auth.createUserWithEmailAndPassword(email, password).await()
                    auth.currentUser!!.linkWithCredential(credential).await()
                }
                else -> {
                    // 其他异常处理
                }
            }
        }
    }
}

3. 检查Firebase控制台配置

  • 确认邮箱/密码登录提供商确实处于启用状态;
  • 检查是否开启了「阻止未验证的电子邮件登录」选项,若开启需确保用户邮箱已验证;
  • 核对应用的google-services.json文件是否与当前Firebase项目匹配,避免环境配置错误。

内容的提问来源于stack exchange,提问作者kv_here

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:34:54