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
相关产品推荐
相关产品推荐

