0

Ich muss einen Datenbankeintrag mit allen Details (UID, Name usw.) für jeden Benutzer erstellen und verwenden, der sich bei der Anwendung anmeldetWie können Benutzerdaten mit Firebase in Android gespeichert werden?

Ich habe Probleme beim Speichern von Benutzerdaten, um Benutzerprofilinformationen zu verwenden und abzurufen Firebase in Android. Ich fand diese documentation auf der alten Version von Firebase, aber das scheint nicht mehr zu funktionieren.

Kann jemand den obigen Code reproduzieren, damit er mit der neuen Version von Firebase funktioniert? Vielen Dank im Voraus.

Bearbeiten - Code unten:

final Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.authWithPassword("[email protected]", "correcthorsebatterystaple", 
new Firebase.AuthResultHandler() { 
@Override 
public void onAuthenticated(AuthData authData) { 
    // Authentication just completed successfully :) 
    Map<String, String> map = new HashMap<String, String>(); 
    map.put("provider", authData.getProvider()); 
    if(authData.getProviderData().containsKey("displayName")) { 
     map.put("displayName", authData.getProviderData().get("displayName").toString()); 
    } 
    ref.child("users").child(authData.getUid()).setValue(map); 
} 
@Override 
public void onAuthenticationError(FirebaseError error) { 
    // Something went wrong :(
} 
}); 

Antwort

1
  • Zur Authentifizierung von Benutzern mit E-Mail und Passwort (Google, Facebook) verwenden Firebase Auth
  • Firebase-Datenbank verwenden unterschiedliche Daten zu speichern als Firebase Realtime Database
  • verwenden
  • Wenn Sie Auth-Benutzer von Ihrem Back-End aus verwalten möchten

Benutzerverwaltung - Vollständige Benutzerdaten abrufen und das Passwort oder die E-Mail-Adresse eines Benutzers ändern Benutzerdefinierte Authentifizierung - Sie können ein externes Benutzersystem in Firebase integrieren. Identitätsprüfung - Verwenden Sie den Dienst, um diese Benutzer auf Ihrem eigenen Server zu identifizieren.

Firebase Auth verfügt über eine NODE JS sdk, die Sie verwenden können. Wenn Sie auf diese Funktionen von Android zugreifen möchten, dann müssen Sie einen Web-Service (zB.Restful API) erstellen und mit ihm über das Netzwerk kommunizieren.

  • Wenn Sie registrierte Auth-Benutzer in Echtzeit-Datenbank zugreifen möchten, ich glaube nicht, Sie können, weil sie voneinander getrennt sind. Sie können Benutzer in Realtime Database registrieren, aber ich verstehe nicht, warum Sie das tun möchten, da Auth Ihnen diese Funktion auf eine einfachere Weise bietet.
  • Firebase Realtime-Datenbank hat auch ein Admin SDK (Java and Node JS)

    Bitte Dokumentation überprüfen, bevor asksing.

+1

Dank Klevi01 habe ich sowohl die Authentifizierung und die Echtzeit-Datenbank arbeitet bereits, was ich brauche, ist eine Möglichkeit, den Benutzern den Zugriff auf die auf der Anwendung authentifiziert sind, I Die Liste der Benutzer kann auf der Registerkarte "Authentifizierung" des Firebase-Dashboards angezeigt werden, sie kann jedoch nicht über die Echtzeitdatenbank auf sie zugreifen. Die obige Dokumentation, die ich verlinkt habe, zeigt, wie dies mit der alten Version von Firebase erreicht wird, aber ich kann es nicht mit den neueren Versionen arbeiten. –

2

Für Benutzer in Feuerbasis Datenbank (neue Version) erstellen, müssen Sie Änderungen wie followning tun ..

 private FirebaseAuth mAuth; 
     String mUserEmail = "[email protected]"; 
     String mPassword = "correcthorsebatterystaple" 

     mAuth.createUserWithEmailAndPassword(mUserEmail, mPassword) 
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 

        Log.d(LOG_TAG, getString(R.string.log_message_auth_successful) + " createUserWithEmail:onComplete:" + task.isSuccessful()); 

        // if task is not successful show error 
        if (!task.isSuccessful()) { 

         try { 
          throw task.getException(); 
         } catch (FirebaseAuthUserCollisionException e) { 
          // log error here        

         } catch (FirebaseNetworkException e) { 
          // log error here 
         } catch (Exception e) { 
         // log error here   
         } 

         } else { 

        // successfully user account created 
       // now the AuthStateListener runs the onAuthStateChanged callback 

        } 
       } 

      }); 
     } 

jetzt hinzufügen folgende Methode in onCreate().

final DatabaseReference ref = FirebaseDatabase.getInstance(). 
    getReferenceFromUrl(https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
    mAuth = FirebaseAuth.getInstance(); 
    mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser(); 

      if (user != null) { 
       // User is signed in 
      Map<String, String> map = new HashMap<String, String>(); 
      map.put("provider", user.getProvider()); 
      if(user.getProviderData().containsKey("displayName")) { 
      map.put("displayName", 
      user.getProviderData().get("displayName").toString()); 
      } 
      ref.child("users").child(user.getUid()).setValue(map); 
      } else { 
       // User is signed out 
       Log.d(LOG_TAG, "onAuthStateChanged:signed_out"); 
      } 
     } 
    }; 

    @Override 
public void onStart() { 
    super.onStart(); 
    mAuth.addAuthStateListener(mAuthListener); 
} 

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

} 
+0

Wenn Sie einen Benutzer mit E-Mail und Passwort anmelden möchten, können Sie die Methode mAuth.signInWithEmailAndPassword (email, password) verwenden. –

+0

Markieren Sie diese Antwort als akzeptiert, wenn es Ihnen hilft. –

0

Verwenden Sie das neueste Firebase SDK, das Sie hier finden: firebase.google.com/docs. Die Verwendung des Legacy-SDK (wie Sie es jetzt tun) wird nur dazu führen, dass es schwieriger wird als nötig.

Sie können Benutzerinformationen erhalten wie folgt:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
if (user != null) { 
    for (UserInfo profile : user.getProviderData()) { 
     // Id of the provider (ex: google.com) 
     String providerId = profile.getProviderId(); 

     // UID specific to the provider 
     String uid = profile.getUid(); 

     // Name, email address, and profile photo Url 
     String name = profile.getDisplayName(); 
     String email = profile.getEmail(); 
     Uri photoUrl = profile.getPhotoUrl(); 
    }; 
} 
Verwandte Themen