0

In meiner App kann ein Benutzer ein Konto erstellen und sich danach anmelden.So melden Sie sich mit Firebase ordnungsgemäß an?

Alles funktioniert wie es soll aber ich bin gespannt ob ich den Benutzer "richtig" angemeldet habe.

Was ich damit meine „richtig“ ist, dass, bevor ich versuchen Sie es in dem Benutzer ich zu überprüfen, ob der Benutzer existiert mit dataSnapshot auf die Eindeutige ID des Benutzers und dann auf die Homepage Ich nehme sie nach Sie wurden authentifiziert.

Aber auf Firebase habe ich gesehen, dies:

„Wenn sich ein Nutzer angemeldet hat erfolgreich können Sie ihre Kontodaten an jeder Punkt mit dem getCurrentUsermethod bekommen.“

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    // Name, email address, and profile photo Url 
    String name = user.getDisplayName(); 
    String email = user.getEmail(); 
    Uri photoUrl = user.getPhotoUrl(); 

    // The user's ID, unique to the Firebase project. Do NOT use this value to 
    // authenticate with your backend server, if you have one. Use 
    // FirebaseUser.getToken() instead. 
    String uid = user.getUid(); 
} 

Wie Sie im obigen Code-Block in den Kommentaren sehen kann, ist, sagt FirebaseUser.Token()

ich ein wenig verwirrt bin zu verwenden, wenn die Art, wie ich es tat, war in Ordnung, oder wenn ich tun, Es ist ein anderer Weg, den Token zu verwenden, der auf Firebase erwähnt wird.

Meine Logik:

Bevor ich in dem Benutzer anmelden ich überprüfen, um zu sehen, ob der Benutzer bereits ein Konto auf Firebase hat:

// Check if the user has already signed up and exists in the database 
    private void checkIfUserSignedUp() { 

     // Get the currently authenticated user 
     mUser = mAuth.getCurrentUser(); 

     // If user exists 
     if (mUser != null) { 

      // Retrieve current user's unique id 
      final String user_id = mUser.getUid(); 


      // Listen for changes in database 
      mDatabaseRef.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 

        // Data snapshot checks contents of the database at the reference. In this case 
        // Checking for registered user by their unique id 
        if (dataSnapshot.hasChild(user_id)) { 

         // Take user to the home/main page after successfully signing in 
         Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class); 
         startActivity(mainIntent); 
         finish(); 
        } else { 

         // User does not exist in the database. Has not signed up. 
         // Take user to register profile 
         Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class); 
         startActivity(registerIntent); 
         finish(); 

        } 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        // User cancelled task... 

       } 
      }); 
     }// End if 

     // Hide progress dialog 
     mLoginProgress.dismiss(); 
    } 

Wie Sie im Bild oben sehen können ich verwendet dataSnapshot.hasChild(user_id) um nach der Existenz des Benutzers zu suchen.

Ist das in Ordnung? Oder sollte ich eine alternative Art und Weise tun, in der ich für den Benutzer mit Firebase.getToken()

Ich will nicht irgendwelche Probleme mit der App später, wenn mein Weg nicht korrekt ist.

EDIT:

Also änderte ich meine Methode, um die folgenden, und der Benutzer konnte nur gut anzumelden:

private void checkIfUserSignedUp() { 

     // Get the currently authenticated user 
     mUser = mAuth.getCurrentUser(); 

        if (mUser != null) { 

         // Take user to the home/main page after successfully signing in 
         Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class); 
         startActivity(mainIntent); 
         finish(); 
        } else { 

         // User does not exist in the database. Has not signed up. 
         // Take user to register profile 
         Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class); 
         startActivity(registerIntent); 
         finish(); 

        } 
     mLoginProgress.dismiss(); 

} 

Also im Grunde der Code-Block an der Spitze wurde falsch gemacht, obwohl es funktioniert hat.

So, da ein Problem dank denen, die kommentiert wurde gelöst. Die nächste Sache ist, wie ich zuvor gefragt habe, was ist Firebase.getToken() und wann wird es verwendet?

+3

Bitte teilen Sie den Code als Text. So unterhaltsam dieses Bild ist, es ist nicht so wiederverwendbar. –

+1

Ich verstehe nicht, warum Sie versuchen, zu überprüfen, ob ein Benutzer sich schon angemeldet hat, indem er in der Datenbank nach 'uid' sucht, wenn 'mAuth.getCurrentUser()' Ihnen bereits sagt, ob er/sie angemeldet ist (und hat sich also angemeldet) oder nicht. – hotrod

+0

@FrankvanPuffelen Ich habe den eigentlichen Code gepostet. – Equivocal

Antwort

1

Um Ihre zweite Frage zu beantworten, was Firebase.getToken()

öffentliche Aufgabe getToken (boolean forcerefresh) Auch ist: Google Play-Dienste

Ruft eine Firebase Auth-ID-Token für den Benutzer; nützlich, wenn Authentifizierung gegen Ihr eigenes Backend.Verwenden Sie unsere Server-SDKs oder folgen Sie der offiziellen Dokumentation , um die Integrität und Gültigkeit dieses Tokens zu überprüfen.

Grundsätzlich ist es eine eindeutige Kennung für den Benutzer in Ihrem Projekt genau wie die, die Sie mit getUid() erhalten. Ich schätze, es wird gemacht, um Ihre Firebase DB-Daten nicht zu kompromittieren, falls Ihr Backend gehackt wird.

Verwandte Themen