Android应用Firebase用户登录失败问题求助
问题描述
在Android应用的「owners」模块中输入正确邮箱和密码后,出现运行时错误,错误日志如下:
E/RecaptchaCallWrapper: Initial task failed for action RecaptchaAction(action=custom_signInWithPassword)with exception - There is no user record corresponding to this identifier. The user may have been deleted.
预期登录成功后跳转至个人资料页面,以下是我的owner_login.java代码:
public class owner_login extends AppCompatActivity { EditText textEmail, textPswd; Button buttonSignupOwner, buttonLogin; FirebaseAuth mAuth; private DatabaseReference mDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_owner_login); FirebaseAnalytics.getInstance(this).setAnalyticsCollectionEnabled(true); FirebaseAnalytics.getInstance(this).setUserProperty("debug", "true"); mAuth = FirebaseAuth.getInstance(); mDatabase = FirebaseDatabase.getInstance().getReference().child("owners"); textEmail = findViewById(R.id.editTextEmail); textPswd = findViewById(R.id.editTextPassword); buttonLogin = findViewById(R.id.buttonLogin); buttonLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String email = textEmail.getText().toString().trim(); String password = textPswd.getText().toString().trim(); if (TextUtils.isEmpty(email)) { textEmail.setError("Email is required"); return; } if (TextUtils.isEmpty(password)) { textPswd.setError("Password is required"); return; } mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener < AuthResult > () { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); String userId = user.getUid(); mDatabase.child(userId).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { String username = snapshot.child("username").getValue(String.class); String email = snapshot.child("email").getValue(String.class); Intent intent = new Intent(owner_login.this, owners_Profile.class); intent.putExtra("username", username); intent.putExtra("email", email); startActivity(intent); finish(); } @Override public void onCancelled(@NonNull DatabaseError error) { Toast.makeText(owner_login.this, "Failed to retrieve user information", Toast.LENGTH_SHORT).show(); } }); } else { Toast.makeText(owner_login.this, "Authentication failed", Toast.LENGTH_SHORT).show(); } } }); } }); } }
解决方法
1. 验证Firebase Auth中是否存在该用户
错误提示明确说明无对应用户记录,先做以下确认:
- 登录Firebase控制台,检查Authentication > 用户列表中是否存在该邮箱对应的账号
- 确认账号未被删除或禁用
- 检查输入的邮箱是否完全匹配(注意大小写、特殊字符,Firebase Auth邮箱不区分大小写,但输入时的空格已被trim,仍需仔细核对)
2. 优化错误提示,精准定位问题
当前代码仅显示模糊的“Authentication failed”,建议修改失败分支,直接展示Firebase返回的具体错误信息:
} else { String errorMsg = task.getException() != null ? task.getException().getMessage() : "Unknown error"; Toast.makeText(owner_login.this, errorMsg, Toast.LENGTH_SHORT).show(); }
3. 确认用户注册时的关联逻辑
如果用户是通过应用内注册流程创建的,需确保注册环节同时完成两件事:
- 调用
createUserWithEmailAndPassword创建Firebase Auth用户 - 将用户信息(username、email等)写入Firebase Database的
owners/{userId}节点
若只写了数据库但未创建Auth用户,就会出现“数据库有记录但Auth无用户”的矛盾,导致登录失败。
4. 检查ReCAPTCHA配置
错误日志涉及RecaptchaCallWrapper,需确认:
- Firebase项目已启用ReCAPTCHA保护
- 应用的SHA-1指纹已正确添加到Firebase控制台的项目设置中
内容的提问来源于stack exchange,提问作者Hasini Thilakarathna
相关产品推荐
相关产品推荐

