Ce n'est pas du tout clair dans la documentation comment vérifier si un utilisateur fraîchement connecté s'est déjà connecté à mon application Web. Il existe un appel isNewUser() référencé ici :

Informations utilisateur supplémentaires

Ce qui n'est pas clair, c'est comment accéder à cet appel lors de l'utilisation d'un appel d'authentification Firebase et d'un observateur.

firebase.auth().onAuthStateChanged(authStateObserver);

L'authStateObserver obtient un objet utilisateur après que la personne se connecte à l'aide du fournisseur spécifié. Cet objet utilisateur ne peut pas être utilisé pour appeler .isNewUser(), alors comment accéder à additionalUserInfo qui appelle .isNewUser() depuis cet authStateObserver ? C'est en javascript dans une application web.

5
michael powers 9 mars 2019 à 14:14

2 réponses

Meilleure réponse

firebase.auth().onAuthStateChanged ne se déclenche qu'avec le FirebaseUser. Vous ne pouvez pas obtenir additionalUserInfo ni aucun credential, par exemple. Jetons OAuth associés au résultat de cet observateur. Vous devez l'obtenir auprès du firebase.auth.UserCredential une fois la promesse de connexion résolue.

Étant donné que ces résultats ne sont disponibles qu'une seule fois lors de la connexion et qu'Auth n'actualise pas les informations d'identification OAuth ou ne met pas à jour activement les profils OAuth sous-jacents, Firebase Auth a choisi de ne pas les fournir dans l'écouteur onAuthStateChanged car cela pourrait induire les développeurs en erreur en pensant que l'auditeur peut être utilisé pour écouter/obtenir de nouvelles informations d'identification ou des données utilisateur supplémentaires alors qu'en réalité, ces informations ne sont disponibles qu'une seule fois lors de la connexion.

L'observateur n'observera que les modifications apportées au FirebaseUser, par exemple. événements de connexion ou de déconnexion.

2
bojeil 11 mars 2019 à 07:04

Pour isNewUser(), allez dans la classe FirebaseUser, cliquez sur la classe enfant, cela devrait vous amener à la classe zzn (pour Android et à partir de maintenant). Recherchez "isNewUser", vous trouverez un champ marqué avec cette chaîne. C'est zzj :

@Field(
        id = 10,
        getter = "isNewUser"
    )
    private boolean zzj;

Cherchez maintenant le getter de ce champ, dans mon cas c'est :

public final boolean zzj() {
    return this.zzj;
}

Donc dans votre base de code, voici la condition : ((zzn) firebaseUser).zzj()

Tout ce que vous avez à faire est de suivre les lettres Zzzzz. Smh (nommage douloureux).

0
Red M 1 déc. 2019 à 01:44