leithdm
5/12/2020 - 5:51 PM

Firebase: login and sign-up via Realtime Database 101

    //LOGIN code
    
    //2 main instance variables:
    private DatabaseReference _mDatabase;
    private FirebaseAuth _mAuth;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        _mDatabase = FirebaseDatabase.getInstance().getReference();
        _mAuth = FirebaseAuth.getInstance();
        
        if (_mAuth.getCurrentUser() != null) {
            login();
        }
    }
    
        public void login() {
        //move us to the next activity
        Intent intent = new Intent(this, UserListActivity.class);
        startActivity(intent);
        //startActivity(new Intent(this, UserListActivity.class)); //THIS IS BETTER
    }
    
    //try to login
    public void goClicked(View view) {
        
        //check if we can log in the user
        final String email = _emailEditText.getText().toString();
        final String password = _passwordEditText.getText().toString();

//if (!(TextUtils.isEmpty(email) || TextUtils.isEmpty(password))) //THIS IS BETTER 
        if (!email.matches("") && !password.matches("")) {
            _mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                login();
                            } else {
                                //sign-up the user via Firebase createeUserWithEmailAndPassword
                                _mAuth.createUserWithEmailAndPassword(email, password)
                                        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                                            @Override
                                            public void onComplete(@NonNull Task<AuthResult> task) {
                                                if (task.isSuccessful()) {
                                                    // add the user to Firebase real-time database to directory users > UID > email
                                                    _mDatabase.child("users").child(task.getResult().getUser().getUid()).child("email").setValue(email);
                                                    login();
                                                } else {
                                                    Toast.makeText(MainActivity.this, "Login failed. Try again", Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                        });
                            }
                        }
                    });
        } else {
            Toast.makeText(this, "Email and password must not be empty", Toast.LENGTH_SHORT).show();
        }
    }