注册/使用电子邮件/密码或Phone Fire base android登录

时间:2020-06-22 12:56:32

标签: android firebase-authentication

我目前正在使用电子邮件/密码登录并注册。

我想在注册时添加电话号码(使用otp验证)

,并且将使用(电子邮件或电话(EditText)+密码(EditText))登录。

问题是我能做到吗?还是不?

如果可以的话,我要添加什么
登录活动:

private TextInputLayout mEmail,mPass;
private Button mLogin,mCallRegister ;
private ProgressDialog mProgress;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener fbAutLis;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_client_login);
  //progress bar
   mProgress =new ProgressDialog(this);
    String titleId="Signing in...";
    mProgress.setTitle(titleId);
    mProgress.setMessage("Please Wait...");

    mAuth= FirebaseAuth.getInstance();

    fbAutLis= new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser();
            if (user != null){
               mProgress.dismiss();
                Intent inte =new Intent(ClientLoginAct.this,ClientMapAct.class);
                startActivity(inte);
                finish();
                return ;
            }

        }
    };

    mEmail =(TextInputLayout)findViewById(R.id.email);
    mPass =(TextInputLayout)findViewById(R.id.pass);
    mLogin =(Button)findViewById(R.id.login);
    mCallRegister =(Button) findViewById(R.id.callRegister);
    
    mLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            if( !validateEmail()|!validatePassword()){
                return;
            }
            mProgress.show();
            final String email=mEmail.getEditText().getText().toString();
            final String password=mPass.getEditText().getText().toString();
            mAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(ClientLoginAct.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()){
                        mProgress.dismiss();

                        Snackbar.make(v, "Email or Password incorrect", Snackbar.LENGTH_LONG).show();
                        //Toast.makeText(ClientLoginAct.this,"Email or Password incorrect ",Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
    });

    mCallRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(ClientLoginAct.this,ClientRegAct.class);
            startActivity(intent);

        }
    });
}

private Boolean validateEmail() {
    String val = mEmail.getEditText().getText().toString();
    String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";

    if (val.isEmpty()) {
        mEmail.setError("Field cannot be empty");
        return false;
    } else if (!val.matches(emailPattern)) {
        mEmail.setError("Invalid email address");
        return false;
    } else {
        mEmail.setError(null);
        mEmail.setErrorEnabled(false);
        return true;
    }
}
private Boolean validatePassword() {
    String val = mPass.getEditText().getText().toString();
    String passwordVal = "^" +
            //"(?=.*[0-9])" +         //at least 1 digit
            //"(?=.*[a-z])" +         //at least 1 lower case letter
            //"(?=.*[A-Z])" +         //at least 1 upper case letter
            //"(?=.*[@#$%^&+=])" +    //at least 1 special character
            "(?=.*[a-zA-Z0-9])" +      //any letter
            "(?=\\S+$)" +           //no white spaces
            ".{6,}" +               //at least 6 characters
            "$";

    if (val.isEmpty()) {
        mPass.setError("Field cannot be empty");
        return false;
    } else if (!val.matches(passwordVal)) {
        mPass.setError("Password is too weak(at least 6 characters & no white spaces)");
        return false;
    } else {
        mPass.setError(null);
        mPass.setErrorEnabled(false);
        return true;
    }
}
@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(fbAutLis);
}

@Override
protected void onStop() {
    super.onStop();
    mAuth.removeAuthStateListener(fbAutLis);
}

}

这是“注册”活动:

private TextInputLayout mEmail,mPass;
private Button mRegister,mCallLogin;
private ProgressDialog mProgress;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener fbAutLis;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_client_reg);
    //progress bar
    mProgress =new ProgressDialog(this);
    String titleId="Signing up...";
    mProgress.setTitle(titleId);
    mProgress.setMessage("Please Wait...");

    mAuth= FirebaseAuth.getInstance();

    fbAutLis= new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser();
            if (user != null){
                mProgress.dismiss();
                Intent inte =new Intent(ClientRegAct.this,ClientMapAct.class);
                startActivity(inte);
                finish();
                return ;
            }

        }
    };


    mEmail =(TextInputLayout)findViewById(R.id.email);
    mPass =(TextInputLayout)findViewById(R.id.pass);
   // mPhone =(TextInputLayout)findViewById(R.id.phone);
    mRegister =(Button)findViewById(R.id.register);
    mCallLogin =(Button) findViewById(R.id.callLogin);

    mRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            if( !validateEmail()|!validatePassword()){
                return;
            }
            mProgress.show();
            final String email=mEmail.getEditText().getText().toString();
            final String password=mPass.getEditText().getText().toString();
            mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(ClientRegAct.this,new OnCompleteListener<AuthResult>(){
                @Override
                public void onComplete(@NonNull Task<AuthResult> task){
                    if (!task.isSuccessful()){
                        mProgress.dismiss();
                        Snackbar.make(v, "This email is already exist", Snackbar.LENGTH_LONG).show();
                        //Toast.makeText(ClientRegAct.this,"This email is already exist",Toast.LENGTH_SHORT).show();
                    }else{
                        String user_id= mAuth.getCurrentUser().getUid();
                        DatabaseReference current_user_db = FirebaseDatabase.getInstance().getReference().child("Users").child("Clients").child(user_id);
                        current_user_db.setValue(true);
                    }
                }
            });
        }
    });
    mCallLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });


}
private Boolean validateEmail() {
    String val = mEmail.getEditText().getText().toString();
    String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";

    if (val.isEmpty()) {
        mEmail.setError("Field cannot be empty");
        return false;
    } else if (!val.matches(emailPattern)) {
        mEmail.setError("Invalid email address");
        return false;
    } else {
        mEmail.setError(null);
        mEmail.setErrorEnabled(false);
        return true;
    }
}
private Boolean validatePassword() {
    String val = mPass.getEditText().getText().toString();
    String passwordVal = "^" +
            //"(?=.*[0-9])" +         //at least 1 digit
            //"(?=.*[a-z])" +         //at least 1 lower case letter
            //"(?=.*[A-Z])" +         //at least 1 upper case letter
            //"(?=.*[@#$%^&+=])" +    //at least 1 special character
            "(?=.*[a-zA-Z0-9])" +      //any letter
            "(?=\\S+$)" +           //no white spaces
            ".{6,}" +               //at least 6 characters
            "$";

    if (val.isEmpty()) {
        mPass.setError("Field cannot be empty");
        return false;
    } else if (!val.matches(passwordVal)) {
        mPass.setError("Password is too weak(at least 6 characters & no white spaces)");
        return false;
    } else {
        mPass.setError(null);
        mPass.setErrorEnabled(false);
        return true;
    }
}

@Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(fbAutLis);
}

@Override
protected void onStop() {
    super.onStop();
    mAuth.removeAuthStateListener(fbAutLis);
}
}

此活动代码Vérify_Otp,但我不知道如何与其他活动链接:

String verificationCodeBySystem;
private Button mVerify;
private EditText mCode;
private ProgressBar mProgressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_otp_verify);

    mVerify = findViewById(R.id.verify_btn);
    mCode = findViewById(R.id.verification_code_entered_by_user);
    mProgressBar = findViewById(R.id.progress_bar);

    String phoneNo = getIntent().getStringExtra("phoneNo");

    sendVerificationCodeToUser(phoneNo);

    mVerify.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String code = mCode.getText().toString();
            if (code.isEmpty() || code.length() < 6) {
                mCode.setError("Wrong OTP...");
                mCode.requestFocus();
                return;
            }
            mProgressBar.setVisibility(View.VISIBLE);
            verifycode(code);
        }
    });

}

private void sendVerificationCodeToUser(String phoneNo) {
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
            "+213" + phoneNo,        // Phone number to verify
            60,                 // Timeout duration
            TimeUnit.SECONDS,   // Unit of timeout
            TaskExecutors.MAIN_THREAD,               // Activity (for callback binding)
            mCallbacks);        // OnVerificationStateChangedCallbacks
}
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
        super.onCodeSent(s, forceResendingToken);
        verificationCodeBySystem = s ;
    }

    @Override
    public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
        String code = phoneAuthCredential.getSmsCode();
                if(code!=null){
                    mProgressBar.setVisibility(View.VISIBLE);
                    verifycode(code);
                }
    }

    @Override
    public void onVerificationFailed(@NonNull FirebaseException e) {
        Toast.makeText(OtpVerify.this,e.getMessage(),Toast.LENGTH_SHORT).show();
    }
};

private void verifycode (String codeByUser){
    PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationCodeBySystem,codeByUser);
    signInTheUserByCredentials(credential);
}

private void signInTheUserByCredentials(PhoneAuthCredential credential){
    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    firebaseAuth.signInWithCredential(credential).addOnCompleteListener(OtpVerify.this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
        if(task.isSuccessful()){

            Toast.makeText(OtpVerify.this, "Your Account has been created successfully!", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(OtpVerify.this,ClientMapAct.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK  );
            startActivity(intent);
        }else{
            Toast.makeText(OtpVerify.this,task.getException().getMessage(),Toast.LENGTH_SHORT).show();
        }
        }
    });
}

所以请改变一下内容,以使我在第一行中得到要求...

0 个答案:

没有答案