override suspend fun signIn(email: String, password: String): Flow<Response<Boolean>> =
callbackFlow {
try {
auth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
trySend(Response.Success(true))
val user = auth.currentUser
} else {
try {
throw task.exception!!
} catch (e: FirebaseAuthInvalidCredentialsException) {
trySend(Response.Failure(e))
}
}
}
trySend(Response.Loading)
} catch (e: Exception) {
trySend(Response.Failure(e))
}
awaitClose { }
}
我想处理用户不存在和密码错误的情况,firebase 在这两种情况下都会抛出相同的异常,那么如何区分这两种情况并让用户知道为什么登录失败?
操作 RecaptchaAction(action=signInWithPassword) 的初始任务失败,但有异常 - 提供的身份验证凭据不正确、格式错误或已过期
对于 2023 年 9 月 15 日以来创建的项目,Firebase 已自动启用针对电子邮件枚举攻击的保护。这种保护的后果之一是用户不存在和密码错误之间不再可能。
您必须禁用针对电子邮件枚举攻击的保护或放弃该用例。