2

Ich mache eine Android-Anwendung. Ich melde mich zuerst mit E-Mail und Passwort an und dann in der OnComplete-Methode, wenn die Aufgabe erfolgreich ist, versuche ich auf Daten in der Datenbank zuzugreifen. Aber jedes Mal, wenn ich die Nachricht höre, höre/scheiterte.Firebase-Berechtigung nach Auth verweigert

My Main Activity-Code ist wie folgt -

private FirebaseAuth auth; 
private EditText inputEmail, inputPassword; 
private Button btnLogin; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Firebase.setAndroidContext(this); 
    //Get Firebase auth instance 
    auth = FirebaseAuth.getInstance(); 

    if (auth.getCurrentUser() != null) { 
     startActivity(new Intent(MainActivity.this, MainActivity.class)); 
     finish(); 
    } 

    setContentView(R.layout.activity_main); 
    inputEmail = (EditText) findViewById(R.id.txtMobile); 
    inputPassword = (EditText) findViewById(R.id.txtPassword); 
    btnLogin = (Button) findViewById(R.id.btnLogin); 

    auth = FirebaseAuth.getInstance(); 


    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String email = inputEmail.getText().toString(); 
      final String password = inputPassword.getText().toString(); 


      //authenticate user 
      auth.signInWithEmailAndPassword(email, password) 
        .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { 
         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 
          // If sign in fails, display a message to the user. If sign in succeeds 
          // the auth state listener will be notified and logic to handle the 
          // signed in user can be handled in the listener. 
          if (!task.isSuccessful()) { 
           // there was an error 
           Log.e("Invalid","Invalid"); 

          } else { 
           /*Intent intent = new Intent(MainActivity.this, Second.class); 
           startActivity(intent); 
           finish();*/ 
           Firebase.getDefaultConfig(); 

           auth = FirebaseAuth.getInstance(); 

           if (auth.getCurrentUser() != null) { 
            Log.e("awesome",auth.getCurrentUser().getEmail()); 
           } 

           Firebase firebase = new Firebase("https://test-fd3f2.firebaseio.com"); 
           firebase.addChildEventListener(new ChildEventListener() { 
            // Retrieve new posts as they are added to Firebase 
            @SuppressWarnings("unchecked") 
            @Override 
            public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { 
             if(snapshot.getValue()!= null) { 
              String mobileNum = snapshot.getValue().toString(); 
              Log.e("here", mobileNum); 
             } 
             //Log.e("Title: ",newPost.get("password").toString()); 
            } 

            @Override 
            public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

            } 

            @Override 
            public void onChildRemoved(DataSnapshot dataSnapshot) { 

            } 

            @Override 
            public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

            } 

            @Override 
            public void onCancelled(FirebaseError firebaseError) { 
             Log.e("Cancel",firebaseError.getCode()+""); 
             Log.e("Cancel",firebaseError.getDetails()); 
             Log.e("Cancel",firebaseError.getMessage()); 
            } 
            //... ChildEventListener also defines onChildChanged, onChildRemoved, 
            // onChildMoved and onCanceled, covered in later sections. 
           }); 
          } 
         } 
        }); 
     } 
    }); 


} 

UPDATE - Meine Feuerbasis Regeln ist als folgt-

 { 
     "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
      } 
     } 
+0

zu verwenden Was genau der Fehler ist? – Danieboy

+0

"W/SyncTree: Hören bei/fehlgeschlagen: FirebaseError: Berechtigung verweigert" ist der genaue Fehler. Ich kann keine Daten aus der Datenbank lesen. –

+0

Ich verwende die Regel, um Daten nur anzuzeigen, wenn auth! = Null. Nach der Anmeldung kann ich die angemeldete Benutzer-E-Mail erhalten, aber es zeigt immer noch die Berechtigung verweigert. –

Antwort

7

Du verschiedene Firebase SDKs Mischen:

  • auth.signInWithEmailAndPassword() stammt vom neuen 3.x/9.x Firebase SDK
  • new Firebase() ist von der Firebase 2.x SDK

Anmeldung in dem neuen SDK, wird die Verbindung zur Datenbank nicht authentifiziert mit der älteren SDK-Version gemacht. Daher ist Ihre Datenbankverbindung immer noch nicht authentifiziert.

Die Lösung ist eine einzige Version (9.x) für alle Bibliotheken in Firebase Ihre build.gradle Datei

+0

Können Sie mir bitte sagen, wie Sie mit dem neuen SDK auf meine Datenbank zugreifen können? –

+0

Siehe https://firebase.google.com/docs/database/android/start/ –

+0

Sie haben mir das Leben gerettet. Vielen vielen Dank, Sir. Ich bin wirklich sehr dankbar für dich. –

Verwandte Themen