How to provide user login with a username and NOT an email?

前端 未结 4 1745
我在风中等你
我在风中等你 2020-11-27 17:39

I\'d like to use Firebase for my web app that is for people with dementia in a care home. They do not have email or social network accounts so will need a simple username /

4条回答
  •  醉话见心
    2020-11-27 18:33

    Appending a dummy domain at end is a kind of a patch up and should be avoided. To enable username login just follow these simple steps.

    Sign Up

    During sign up take the userid , email and password . Register the user with normal email and password. On Success of it save the email against the user_id in a separate node(branch).

    mButtonSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isValid()){
                    mProgressBar.setVisibility(View.VISIBLE);
                    final String userId = mEditTextUserId.getText().toString();
                    final String emailId = mEditTextEmail.getText().toString() ;
                    String password = mEditTextPassword.getText().toString() ;
                    firebaseRef.createUser(emailId, password, new Firebase.ResultHandler() {
                        @Override
                        public void onSuccess() {
                           firebaseRef.child("user_ids").child(userId).setValue(emailId);
                           Toast.makeText(getBaseContext(),"You are successfully registered ",Toast.LENGTH_SHORT).show();
                           mProgressBar.setVisibility(View.GONE);
                        }
    
                        @Override
                        public void onError(FirebaseError firebaseError) {
                            mProgressBar.setVisibility(View.GONE);
                            Toast.makeText(getBaseContext(),firebaseError.toString(),Toast.LENGTH_SHORT).show();
                        }
                    });
    
                }
            }
        });
    

    Database

    Database structure will look like this

    Login

    Check if the user has entered an email or userId. If it is a email id then directly perform login with it otherwise fetch the email id associated with the username and perform login.

        Button buttonLogIn = (Button)findViewById(R.id.button_login);
        buttonLogIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {             
    
                mProgressBar.setVisibility(View.VISIBLE);
                String username = mEditTextEmail.getText().toString() ;
                final String password = mEditTextPassWord.getText().toString() ;
    
              //  Check if it is an email or not
                 if(android.util.Patterns.EMAIL_ADDRESS.matcher(username).matches())                 {
                    performLogin(username,password);
                }else{
                  //get the emailId associated with the username      
            firebaseRef.child("user_ids").child(username)
                  .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            if(dataSnapshot!=null){
                                String userEmail =  dataSnapshot.getValue(String.class);
                                performLogin(userEmail,password);
                            }
                        }
    
                        @Override
                        public void onCancelled(FirebaseError firebaseError) {
                            //Handle Error
                        }
                    });
                }
    
            }
        });
    

    private void performLogin(String emailId, String password) {
        firebaseRef.authWithPassword(emailId,password, new Firebase.AuthResultHandler() {
            @Override
            public void onAuthenticated(AuthData authData) {
                uid = authData.getUid() ;
                Toast.makeText(getBaseContext(), authData.toString(), Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onAuthenticationError(FirebaseError firebaseError) {
                Toast.makeText(getBaseContext(), firebaseError.toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    

提交回复
热议问题