【问题标题】:"task.isSuccessful" is always returning false in CreatewithUseremailandpassword“task.isSuccessful”在 CreatewithUseremailandpassword 中总是返回 false
【发布时间】:2019-05-18 12:00:07
【问题描述】:

我已经使用 createUserWithEmailAndPassword 方法注册了用户,并且他们已在我的 firebase 项目中注册(我可以看到他们的信息)。但是当我尝试使用创建的电子邮件和密码登录时,task.isSuccessful 方法总是返回 false,并且每次都在运行 else 语句。

登录和注册代码:

private Button buttonRegister;
private EditText editTextEmail;
private EditText editTextPassword;
private TextView textViewSignin;

private ProgressDialog progressDialog;
private FirebaseAuth firebaseAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    progressDialog=new ProgressDialog(this);
    firebaseAuth= FirebaseAuth.getInstance();


    buttonRegister = (Button) findViewById(R.id.buttonRegister);

    editTextEmail=(EditText) findViewById(R.id.editTextEmail);
    editTextPassword=(EditText) findViewById(R.id.editTextPassword);

    textViewSignin=(TextView) findViewById(R.id.textViewSignin);

    buttonRegister.setOnClickListener(this);
    textViewSignin.setOnClickListener(this);

    if(firebaseAuth.getCurrentUser()!=null){
        //start the profile activity
        finish();
        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
    }


}

private void registerUser(){
    String email=editTextEmail.getText().toString().trim();
    String password=editTextEmail.getText().toString().trim();

    if(TextUtils.isEmpty(email)){
        Toast.makeText(this, "Please enter E-mail first", Toast.LENGTH_SHORT).show();
        return;
    }

    if(TextUtils.isEmpty(password)){
        Toast.makeText(this, "Please enter password first", Toast.LENGTH_SHORT).show();
        return;
    }

    progressDialog.setMessage("Registerring User......");
    progressDialog.show();


    firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    progressDialog.dismiss();
                    if(task.isSuccessful()){
                        finish();
                        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
                    }
                    else{
                        Toast.makeText(MainActivity.this, "Unable to Register! Please try again.", Toast.LENGTH_SHORT).show();
                    }
                }
            });


}

@Override
public void onClick(View v) {
    if(v == buttonRegister){
        registerUser();
    }

    if(v == textViewSignin){
        finish();
        startActivity(new Intent(this, LoginActivity.class));
    }

  }

【问题讨论】:

    标签: android android-studio firebase-authentication


    【解决方案1】:

    @Hemant 亚达夫

    您是否检查过 firebase 在返回 false 时会给出什么异常?请使用以下代码检查当时发生了什么异常:

    task.getException() //which returns the exception that caused the Task to fail.
    

    检查并更新您遇到的异常,我们可以帮助您,或者您可以想办法解决它?

    【讨论】:

    • 它给了 FirebaseAuthInvalidCredentialsException
    • 您尝试登录的登录凭据可能无效。请尝试使用正确的凭据登录。欲了解更多详情,请访问以下链接:FirebaseAuthInvalidCredentialisException
    • 如果您仍然遇到相同的异常,请尝试找出从异常中获取的错误代码,这将帮助您解决问题。要获取错误代码,请尝试使用以下方法:String errorCode = ((FirebaseAuthInvalidUserException) task.getException()).getErrorCode();
    • FirebaseAuthInvalidUserException 支持的错误代码如下: • ERROR_USER_DISABLED – 与电子邮件关联的帐户存在但已被禁用。 • ERROR_USER_NOT_FOUND – 找不到与指定电子邮件地址匹配的帐户。用户要么输入了错误的电子邮件地址,尚未创建帐户,要么帐户已被删除......
    • ERROR_EMAIL_ALREADY_IN_USE – 表示用户正在尝试创建新帐户,或更改已被另一个帐户使用的现有帐户的电子邮件地址。 • ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL – 尝试使用通过 AuthCredential 对象的 signInWithCredential() 方法登录帐户时,此错误表明与 AuthCredential 实例关联的电子邮件已被另一个帐户使用与提供的凭据不匹配。
    【解决方案2】:

    在我看来这是一个愚蠢的错误。 我在注册用户时为密码字段分配了电子邮件值。

    String email=editTextEmail.getText().toString().trim();
    String password=editTextEmail.getText().toString().trim();
    

    所以密码实际上并没有分配给我实际传递的密码。 抱歉这个非常愚蠢的错误。

    【讨论】:

      【解决方案3】:

      试试这个代码

      firebaseAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(this,new OnCompleteListener<AuthResult>() {
      @Override
      public void onComplete(@NonNull Task<AuthResult> task) {
      
          if (task.isSuccessful()) {
              finish();
              startActivity(new Intent(this, MainActivity.class));
          }
          else {
              try {
                  throw task.getException();
              } 
              catch (FirebaseAuthInvalidCredentialsException e) {
                  Toast.makeText(getApplicationContext(), "Invalid Password", Toast.LENGTH_LONG).show();
              }
              catch (FirebaseAuthEmailException e){
                  Toast.makeText(getApplicationContext(), "Invalid Email", Toast.LENGTH_LONG).show();
              }
              catch (FirebaseAuthException e){
                  Toast.makeText(getApplicationContext(), "Invalid Credentials", Toast.LENGTH_LONG).show();
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
      }
      });
      

      更多详情请访问https://firebase.google.com/docs/auth/android/password-auth

      【讨论】:

      • 请重新检查您的电子邮件和密码,因为当传递给 signInWithEmailAndPassword 方法的一个或多个凭据无法识别和/或验证用户时,会引发此异常
      • 我通过创建许多不同的帐户检查了几次,但它给出了相同的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-11-05
      相关资源
      最近更新 更多