2017-06-14 2 views
1

Ich spiele mit der FirebaseUI-Android herum und habe eine Frage, welche ID verwendet werden soll, um Benutzer eindeutig zu identifizieren. Die FirebaseUI hat das Authentifizierungsrecht verwaltet und das Objekt IdpResponse zurückgegeben. Dies kann z.B. Facebook, Twitter, Telefon und mehr. Vielen Dank an alle, die dahinter stehen.Benutzerdefinierte Firebase-Benutzeridentität, die den Firebase-Benutzer nicht verwendet

Da die FirebaseUser.getUid() kann ändern, wenn Benutzer löschen/neu erstellen sein Konto daher möchte ich nicht meine Benutzerdaten mit dem FirebaseUser.getUid() Token verknüpfen.

In Zukunft, wenn ich entscheide, Benutzer löschen dort Konto die Benutzer wird sich ändern, wenn Benutzer zurückkommen und alle Benutzerhistorie für diesen Benutzer in meinem System nicht mehr richtig zugreifen. Auch in Zukunft, wenn ich mein System zu einem Ort migrieren wird die UI nicht so praktisch sein, um richtig zu haben?

Jetzt habe ich diesen Wrapper (Code unten) erstellt, um eine eindeutige ID zu erstellen, die aus den Daten innerhalb der IdpResponse extrapoliert wird. Weiß nicht wirklich, aber ich denke, dass es so eine Kollision geben wird, es sei denn, es gibt eine Google2.0, z. Twitter2.0 :) richtig. Und gleichzeitig ist es einfacher, Fehler im System zu entlarven, da die IDs nicht UUID sind.

Ist dies ein empfohlener Weg, um das Problem der Benutzer-ID zu behandeln. Ich brauche wirklich einige Rückmeldungen und Fallstricke Warnungen darüber.

@Override 
public String getUserId() { 
    String userId; 
    FirebaseUser user = getInstance().getCurrentUser(); 
    if (user.getEmail() != null) 
     // User sign in with E-Mail 
     userId = user.getEmail().replace(".", ","); 
    else if (user.getPhoneNumber() != null){ 
     // User sign in with Phone 
     userId = user.getPhoneNumber(); 
    }else 
     // User sign in with Twitter or Facebook 
     userId = user.getUid(); 
    return userId; 
} 

Was ich am meisten mit dieser Mühe ist der Twitter oder Facebook, da ich immer noch die FirebaseUser.getUid() verwenden. Ist die IdpResponse.getIdpToken() besser für uns?

Antwort

0

Wie Sie in Ihrem Beitrag erwähnt haben, ist die Verwendung der UID nicht die beste Option. Wenn der Benutzer seinen Account entfernt und versucht, einen anderen Account zu erstellen, wird ein weiterer uid generiert. In diesem Fall verliert er also die gesamte Datenhistorie. Der beste Weg, um Benutzer zu identifizieren, ist die Verwendung der email address. Die E-Mail-Adresse ist einzigartig, einfach zu bedienen und wenn Sie in der Zukunft eine Google account mit einer Facebook account verknüpfen möchten und mit einer Twitter account, basierend auf der E-Mail-Adresse, können Sie id tun. Da Firebase, nicht . Symbol im Schlüssel akzeptieren schlage ich Ihnen die E-Mail-Adresse wie folgt kodieren:

[email protected] -> Name @ email, com

Wie Sie wahrscheinlich sehen, Ich habe das Punktsymbol . mit einer Koma , geändert. Um dies zu erreichen, empfehle ich Ihnen die folgenden Methoden:

static String encodeUserEmail(String userEmail) { 
    return userEmail.replace(".", ","); 
} 

static String decodeUserEmail(String userEmail) { 
    return userEmail.replace(",", "."); 
} 

Ich hoffe, es hilft.

+0

Dank dachte ich die gleiche Sache. –

+0

Also, wenn du denkst, dass meine Antwort dir geholfen hat, denk bitte darüber nach, es anzunehmen und +1 zu geben. Vielen Dank! –

Verwandte Themen