проверка, есть ли у пользователя определенный дочерний элемент для входа в систему - PullRequest
0 голосов
/ 28 декабря 2018

Я делаю приложение для Android с использованием базы данных Firebase и хочу убедиться, что пользователь не зарегистрирован как «Ассоциация», поэтому я проверяю, принадлежит ли он к дочерней «Ассоциации».Предполагается, что метод userLogin не должен входить в систему пользователя, если он находится под дочерней «Ассоциации», и входить в него в противном случае.Тем не менее, он не работает, и пользователь вошел в систему, даже если он находится в разделе «Ассоциации»

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



    mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            progressBar.setVisibility(View.GONE);
            if (task.isSuccessful()) {

                FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
                String RegisteredUserID = currentUser.getUid();

                DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations").child(RegisteredUserID);

                jLoginDatabase.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        if(dataSnapshot.exists()) {
                            Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            finish();
                            Intent intent = new Intent(SignInDonor.this, homedonor.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(intent);
                        }



            }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }});}
            else {
                Toast.makeText(getApplicationContext(), task.getException().getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
}

1 Ответ

0 голосов
/ 28 декабря 2018

Я не пробовал этого, но он должен работать, во-первых, после того, как вы войдете в систему с пользователем и войдете внутрь task.isSuccessful, вы можете получить текущего вошедшего в систему пользователя с помощью task.getResult().getUser().getUid().Затем просто зациклите внутри ассоциаций и получите каждый пользовательский ключ (я предполагаю, что внутри ассоциаций есть идентификаторы пользователя как узлы с определенным значением), затем сравните, равен ли текущий вошедший в систему пользователь одному внутри этого узла, если совпадения будут отображать ваш тост, если нет, вы будете перенаправлены.

Попробуйте это

public void onComplete(@NonNull Task<AuthResult> task) {
                progressBar.setVisibility(View.GONE);
                if (task.isSuccessful()) {

                    DatabaseReference jLoginDatabase = FirebaseDatabase.getInstance().getReference().child("Associations");

                    jLoginDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {

                        for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                             if(snapshot.getKey().equals(task.getResult().getUser().getUid()) {
                                Toast.makeText(getApplicationContext(), "You are not registered", Toast.LENGTH_SHORT).show();
                            }
                            else
                            {
                                finish();
                                Intent intent = new Intent(SignInDonor.this, homedonor.class);
                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(intent);
                            }

                       }

Я использовал addListenerForSingleValueEvent, потому что нам нужно только один раз выполнить цикл на эталоне и не продолжать слушать данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...