Вход в систему не является намеренным в назначенном действии для роли пользователя

#android #firebase #firebase-realtime-database

# #Android #огневая база #firebase-база данных в реальном времени

Вопрос:

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

Поэтому я добавил поля «isAdmin» и «isStudent», я думал добавить хотя бы значение. Таким образом, каждый раз, когда пользователь будет входить в систему, он будет видеть, есть ли у пользователя «isAdmin» и имеет значение, и будет перенаправлять на другие действия, то же самое относится и к «isStudent».

Дело в том, что я не знаю, как это сделать, нет snapshot.hasChild(«isAdmin»).equals(«1») или прочее. Единственное, что мне нужно, это то, что пользователь войдет в систему, если учетная запись имеет поле «isAdmin» /»isStudent» и имеет значение.

вот мой код в части входа.

 btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                  checkField(userID);
                  checkField(password);
                  if(valid){
                      mAuth.signInWithEmailAndPassword(userID.getText().toString()  "@gmail.com".trim(), password.getText().toString().trim()).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                          @Override
                          public void onSuccess(AuthResult authResult) {
                              Toast.makeText(LoginActivity.this, "Logged in Successfully", Toast.LENGTH_SHORT).show();
                              CheckUserAccessLevel(authResult.getUser().getUid());

                          }
                      }).addOnFailureListener(new OnFailureListener() {
                          @Override
                          public void onFailure(@NonNull Exception e) {
                              Toast.makeText(LoginActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                          }
                      });
                  }
            }
        });
 

итак, в основном я вызываю функцию CheckUserAccessLevel, в которой она фильтрует роль пользователя.
Итак, это моя функция CheckUserAccessLevel… Но он предназначен только для учетной записи администратора, но не для учетной записи учащегося

 private void CheckUserAccessLevel(String uid) {
          DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users/" uid);
          databaseReference.addValueEventListener(new ValueEventListener() {
              @Override
              public void onDataChange(@NonNull DataSnapshot snapshot) {
                  if(snapshot.hasChild("isAdmin")){
                      Toast.makeText(LoginActivity.this, "Logged in as Admin", Toast.LENGTH_SHORT).show();
                      startActivity(new Intent(getApplicationContext(), WelcomeAdminActivity.class));
                      finish();
                  }
                  else if (snapshot.hasChild("isStudent")){
                      Toast.makeText(LoginActivity.this, "Logged in as Student", Toast.LENGTH_SHORT).show();
                      startActivity(new Intent(getApplicationContext(), WelcomeStudentActivity.class));
                      finish();
                  }
                  else {
                      FirebaseAuth.getInstance().signOut();
                      startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                      finish();
                  }
              }
              @Override
              public void onCancelled(@NonNull DatabaseError error) {
                  Toast.makeText(LoginActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
              }
          });
    }
 

это моя база данных в реальном времени

Комментарии:

1. потому что вы назначили isStudent =2 и isAdmin = 1 в базе данных. 1 означает true, следовательно, он всегда выполняет намерение администратора. Если нет, то, пожалуйста, добавьте дополнительную информацию о ваших полях.

2. @ShoaibK. здравствуйте, вы знаете, какое ключевое слово я должен использовать, чтобы получить значение isStudent? используя snapshot.hasChild(«isStudent»)? здесь нет snapshot.getstring, хотя. я немного сбит с толку.

3. В чем проблема if(snapshot.hasChild("isAdmin")){ ? Когда вы просматриваете этот код в отладчике, что вы ожидаете от этой строки? И что он делает вместо этого?