проверить пользователя с помощью firebase auth - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу, чтобы пользователи, которые зарегистрировались в приложении пользователя, не могли войти в приложение администратора или врачей.
Или врачи, которые зарегистрировались в приложении врачей, не могут войти в приложение пользователя или администратора.
Или администратор, который зарегистрировался в приложении администратора, не может войти в приложение для врачей или пользователей.

database structure

Метод, который я пробовал для проверки пользователя,

private void updateUI(final FirebaseUser user) {
    if (user!=null){

        final DatabaseReference adminsRef = FirebaseDatabase.getInstance().getReference().child("Admins").child(user.getUid());
        final DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(user.getUid());
        adminsRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){

                    userRole = dataSnapshot.child("role").getValue(String.class);
                    if (user.equals("admin")){
                        FancyToast.makeText(getApplicationContext(),"User already registered as an Admin",FancyToast.LENGTH_LONG,FancyToast.INFO,false).show();
                        FirebaseAuth.getInstance().signOut();
                        if (AccessToken.getCurrentAccessToken() != null) {
                            LoginManager.getInstance().logOut();
                        }
                        startActivity(new Intent(MainActivity.this,MainActivity.class));
                        finish();
                    }
                    else {
                        FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference userRef = database.getReference("Doctors").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        map.put("email", FirebaseAuth.getInstance().getCurrentUser().getEmail());
                        map.put("name", FirebaseAuth.getInstance().getCurrentUser().getDisplayName());
                        map.put("profile_status","incomplete");
                        map.put("role","doctor");
                        //map.put("location", getIntent().getExtras().get("location").toString());
                        userRef.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    FancyToast.makeText(getApplicationContext(), "User details updated successfully", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                } else {
                                    FancyToast.makeText(getApplicationContext(), "User details update unsuccessful", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                }
                            }
                        });
                        Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                        startActivity(intent);
                        finish();
                    }

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
        usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    userRole = dataSnapshot.child("role").getValue(String.class);
                    if (userRole.equals("user")){
                        FancyToast.makeText(getApplicationContext(),"User already registered as a Customer",FancyToast.LENGTH_LONG,FancyToast.INFO,false).show();
                        FirebaseAuth.getInstance().signOut();
                        if (AccessToken.getCurrentAccessToken() != null) {
                            LoginManager.getInstance().logOut();
                        }
                        startActivity(new Intent(MainActivity.this,MainActivity.class));
                        finish();
                    }
                    else {
                        FirebaseDatabase database = FirebaseDatabase.getInstance();
                        DatabaseReference userRef = database.getReference("Doctors").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("uid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        map.put("email", FirebaseAuth.getInstance().getCurrentUser().getEmail());
                        map.put("name", FirebaseAuth.getInstance().getCurrentUser().getDisplayName());
                        map.put("profile_status","incomplete");
                        map.put("role","doctor");
                        //map.put("location", getIntent().getExtras().get("location").toString());
                        userRef.updateChildren(map).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                if (task.isSuccessful()) {
                                    FancyToast.makeText(getApplicationContext(), "User details updated successfully", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                } else {
                                    FancyToast.makeText(getApplicationContext(), "User details update unsuccessful", FancyToast.LENGTH_LONG, FancyToast.SUCCESS, true).show();
                                }
                            }
                        });
                        Intent intent = new Intent(MainActivity.this, HomeActivity.class);
                        startActivity(intent);
                        finish();
                    }

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



    }

}

1 Ответ

0 голосов
/ 07 апреля 2020

Вы делаете почти то, что нужно сделать. Просто проверьте, существует ли пользовательский UID на дочернем узле Users или на дочернем узле admin с использованием моментального снимка данных.

Вот как можно получить роль пользователя:

String userRole;

roleRef = FirebaseDatabase.getInstance().getReference().child("Users").child(firebaseAuth.getCurrentUser().getUid());
        roleRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                try {
                    userRole = dataSnapshot.child("role").getValue().toString();
                    userProf_username.setText(userNameInData);
                }catch (Throwable e){
                    Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
                }

            }

Теперь роль пользователя находится в строке userRole. Теперь вы можете проверить, является ли пользователь администратором или обычным клиентом.

Затем добавьте блок if-else:

if(userRole.equals("admin")){
startActivity(new Intent(MainActivity.this, adminActivity.class);
}
else{
startActivity(new Intent(MainActivity.this, userActivity.class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...