Android接入Firebase登录报email address is badly formatted错误如何解决?
错误产生原因
- 核心错误:Firebase Auth提供的
signInWithEmailAndPassword方法要求第一个参数为邮箱地址、第二个参数为登录密码,你的代码中参数顺序传反,将密码作为第一个参数传入,系统校验密码格式不符合邮箱规则,因此抛出email address is badly formatted格式错误。 - 隐藏逻辑漏洞:密码长度校验分支未添加
return语句,即使用户输入密码长度不符合要求,代码仍会继续执行后续登录逻辑,同时该分支也未隐藏进度条,会导致进度条一直显示。
修复方法
修改loginUser方法中两处问题即可,修改后对应代码如下:
private void loginUser() { String userEmail = email.getText().toString().trim(); String userPass = Password.getText().toString().trim(); progressBar.setVisibility(View.VISIBLE); if (TextUtils.isEmpty(userEmail)){ Toast.makeText(this, "Email is empty", Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); return; } if (TextUtils.isEmpty(userPass)){ Toast.makeText(this, "Password is empty", Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); return; } // 修复密码校验分支的逻辑漏洞 if (userPass.length() < 5){ Toast.makeText(this, "Password must be 5 characters or more", Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); return; } // 修复参数传入顺序,第一个传邮箱,第二个传密码 auth.signInWithEmailAndPassword(userEmail,userPass) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()){ Toast.makeText(MainActivity.this, "Login is Successful", Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); } else { Toast.makeText(MainActivity.this, "Error"+task.getException(), Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); } } }); }
内容的提问来源于stack exchange,提问作者James gonzales
相关产品推荐
相关产品推荐

