Firebase邮箱密码认证场景下注册、登录均报认证失败的排查
排查&修复步骤
基础配置核验
- 检查
AndroidManifest.xml是否声明INTERNET网络权限,无该权限时所有Firebase网络请求直接失败,触发统一的认证报错 - 确认
google-services.json存放路径正确:需放在app模块根目录(与模块下的build.gradle同级),而非项目根目录 - 核对配置文件内容:确认文件内的项目ID、应用包名(对应代码中的
com.example.movir)与你在Firebase控制台操作的项目完全一致,避免跨项目配置错配 - 确认控制台的邮箱/密码登录方式已保存生效,无临时访问拦截规则,调试用的SHA-1证书指纹已添加到项目设置中
- 检查app模块build.gradle已引入对应版本的Firebase Auth、实时数据库依赖,且已应用Google服务插件
代码逻辑修正
当前代码存在多处输入处理漏洞,会直接导致认证请求失败:
- 获取输入框文本时未做trim处理,用户输入附带的前后空格会直接导致邮箱/密码与服务端存储的凭据不匹配
- 未做输入合法性校验:空输入、密码长度不足6位、邮箱格式非法的场景下直接发起认证请求,这类非法参数传入Firebase Auth接口会直接返回任务失败
- 失败提示硬编码为通用的“Authentication failed”,未输出真实异常信息,无法定位具体失败原因:需将失败分支的Toast内容替换为
task.getException().getMessage(),直接展示服务端返回的具体错误(如“密码长度不足6位”“邮箱格式错误”“凭据不匹配”等)
生命周期逻辑补全
- 你定义的
firebaseAuthStatelistener从未注册到Auth实例,也未在组件生命周期中做注销,当前的登录后跳转逻辑完全未生效:需在onStart方法中添加mAuth.addAuthStateListener(firebaseAuthStatelistener),在onStop方法中添加mAuth.removeAuthStateListener(firebaseAuthStatelistener),既避免内存泄漏,也保证状态监听正常触发 - 调整代码内的错位注释:当前登录分支中成功、失败的注释完全写反,虽不影响运行,但易干扰问题排查
- 给空的
TAG常量赋值实际字符串值(如private static final String TAG = "RentersLoginAuth";),方便通过Logcat过滤日志定位问题
分步验证
先移除所有数据库写入逻辑,只保留基础的用户创建、登录认证流程,在回调中展示/打印真实异常信息,确保认证流程完全跑通后,再叠加数据库写入逻辑。注意数据库写入是独立的异步任务,其执行结果不会影响Auth任务的成功/失败状态,若认证流程本身失败,后续的数据库操作根本不会触发。
内容的提问来源于stack exchange,提问作者Timothy Smith
相关产品推荐
相关产品推荐

