1

Я работаю над проектом android, для которого требуется электронная почта пользователя и аутентификация pwd. Детали хранятся в базе данных firebase. Проблема возникает всякий раз, когда я пытаюсь войти в систему снова с помощью электронной почты и пароля. В моей LogCat сообщение об ошибке:Ошибка базы данных Android Firebase: разрешение отклонено

W/SyncTree: Listen at/failed: DatabaseError: Permission denied 

Посмотрите на мой код ниже:

public class LoginUser extends AppCompatActivity { 

private RelativeLayout relativeLayout; 

private EditText et_email, et_password; 
private Button loginBtn; 

private FirebaseAuth mAuth; 
private FirebaseAuth.AuthStateListener authStateListener; 
private DatabaseReference databaseReference; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login_user); 

    mAuth = FirebaseAuth.getInstance(); 
    databaseReference = FirebaseDatabase.getInstance().getReference(); 
    databaseReference.keepSynced(true); 

    relativeLayout = (RelativeLayout) findViewById(R.id.activity_login_user); 

    et_email = (EditText) findViewById(R.id.emailField); 
    et_password = (EditText) findViewById(R.id.pwdField); 
    loginBtn = (Button) findViewById(R.id.loginBtn); 

    loginBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      initLogin(); 
     } 
    }); 

    authStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      if (firebaseAuth.getCurrentUser() != null){ 
       initLogin(); 
      } 
      else { 
       startActivity(new Intent(LoginUser.this,RegisterFireBase.class)); 
      } 
     } 
    }; 

} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(authStateListener); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mAuth != null){ 
     mAuth.removeAuthStateListener(authStateListener); 
    } 
} 

private void initLogin() { 

    String email = et_email.getText().toString().trim(); 
    String pass = et_password.getText().toString().trim(); 

    if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(pass)){ 
     mAuth.signInWithEmailAndPassword(email,pass).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 

       checkForUser(); 

      } 
     }); 
    } 
    else { 
     Toast.makeText(this, "Some fields are empty", Toast.LENGTH_SHORT).show(); 
    } 

} 

private void checkForUser() { 

    final String userId = mAuth.getCurrentUser().getUid(); 
    databaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.hasChild(userId)){ 

       Intent loginIntent = new Intent(LoginUser.this, FireProfile.class); 
       loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(loginIntent); 

       Snackbar.make(relativeLayout,"Log In Successful",Snackbar.LENGTH_LONG).show(); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

}

Что может быть причиной этого?

+0

Существует не так много мы может сказать в стороне от того, что сообщение об ошибке уже говорит: вы пытаетесь прочитать данные, к которым у вас нет доступа. Чтобы позволить нам быть более полезными, обменивайтесь * минимальными * JSON и правилами безопасности, которые будут вызывать эту ошибку. –

ответ

0

Возможная причина: вы не имеете права на чтение и запись в своей базе данных. Для обеспечения доступа к записи и записи:

Перейдите в консоль firebase и включите операции чтения и записи в своей базе данных.

Firebase Console -> База данных (разработка) -> ПРАВИЛА

{ 
    "rules": { 
    ".read": "true", 
    ".write": "true" 
    } 
} 
+0

Большое спасибо. Проблема не в разделе правил, но я рад, что вы ответили. Всем спасибо. – Nzadibe

2

Перейти на вкладку Правила на консоли базы данных. Если вы явно не предоставили .read доступ к своему пользователю, тогда разрешение будет отклонено.

Эта ссылка превосходен в Firebase документ:

https://firebase.google.com/docs/database/security/securing-data

Эти две ноты на этой странице, представляют особый интерес:

Примечание: Доступ запрещен по умолчанию. Если на пути или над ним не указано правило .write или .read, доступ будет отклонен.

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

Обзора узел, где разрешение было отказано и использовать тренажер на вкладке Правила для того, чтобы проверить свои правила для различных контекстов безопасности пользователей (не прошедшая проверку подлинности, проверка подлинности и т.д.)