Comment puis-je me connecter avec plusieurs services sociaux avec Firebase?
Je veux que les utilisateurs soient en mesure de s'authentifier sur mon Firebase application à l'aide de différents auth fournisseurs, tels que Facebook, Twitter, ou Github. Une fois authentifié, je veux que les utilisateurs aient accès au même compte n'importe qui auth méthode qu'ils ont utilisée.
En d'autres termes, je veux fusionner plusieurs auth méthodes dans un compte unique au sein de mon application. Comment puis-je faire dans un Firebase app?
Vous devez vous connecter pour publier un commentaire.
Mise à jour (20160521): Firebase vient de sortir une mise à jour majeure de son Firebase Authentification produit, ce qui permet maintenant à un seul utilisateur à associer les comptes de l'différentes prises en charge des fournisseurs. Pour en savoir plus sur cette fonctionnalité, consultez la documentation de iOS, Web et Android. La réponse ci-dessous à gauche, pour des raisons historiques.
La base Firebase service propose plusieurs méthodes d'authentification:
https://www.firebase.com/docs/security/authentication.html
À sa base, Firebase utilise secure JWT les jetons d'authentification. Tout ce qui résulte en la production d'un JWT jeton (comme l'utilisation d'une librairie JWT sur votre propre serveur) sera à authentifier vos utilisateurs de Firebase, de sorte que vous avez le contrôle complet sur le processus d'authentification.
Firebase offre un service appelé Firebase Simple Connexion qui est une façon de générer ces jetons (ce qui permet à notre Facebook, Twitter, etc auth). Il est destiné aux communes auth scénarios de sorte que vous pouvez obtenir rapidement opérationnel avec pas de serveur, mais ce n'est pas la seule façon de s'authentifier, et n'est pas destiné à être une solution globale.
Voici une approche permettant la connexion avec de nombreux fournisseurs à l'aide de Firebase Simple Connexion:
chaque fournisseur identifiant spécifique pour que l'on canonique id.
compte d'utilisateur donné, au lieu d'un seul.
Dans la pratique, les règles de sécurité pourrait ressembler à ceci, en supposant que vous souhaitez activer à la fois Twitter et Facebook d'authentification (ou permettre à un utilisateur de créer un compte avec l'un, puis plus tard ajouter les autres):
Dans cet exemple, vous pouvez stocker un id d'utilisateur (qui peut être n'importe quoi de votre choix) et de maintenir la correspondance entre Facebook, Twitter, etc. les mécanismes d'authentification de l'utilisateur principal d'enregistrement. Lors de la connexion pour chaque utilisateur, vous allez chercher de l'utilisateur principal d'enregistrement de l'utilisateur-mappings, et l'utilisation que l'id que le principal magasin de données de l'utilisateur et les actions. Le ci-dessus a également restreint et valide les données de l'utilisateur mappages de sorte qu'il ne puisse être écrit par l'utilisateur lui-même qui a déjà la même Facebook, Twitter, etc. id utilisateur dans /utilisateurs/$userid/(facebook-id|twitter-id|etc-id).
Cette méthode vous permettra d'être rapidement opérationnel. Cependant, si vous avez un complexe d'utilisation et d'voulez un contrôle complet sur l'authentification de l'expérience, vous pouvez exécuter votre propre auth code sur vos propres serveurs. Il y a beaucoup de utile bibliothèques open source que vous pouvez utiliser pour ce faire, comme everyauth et passeport.
Vous pouvez également authentifier à l'aide de la 3ème partie auth fournisseurs. Par exemple, vous pouvez utiliser Seuls, qui a une énorme variété de intégrations out-of-the-box, sans avoir à écrire de code côté serveur.
.child('twitter/id').val()
et.child('twitter-id').val()
. Sont les deux références différentes? Je n'ai pas l'attraper.auth.uid
au lieu deauth.id
, et lors de l'utilisation de fournisseurs comme Facebook, etc., il ajoute le nom du fournisseur de laauth.uid
valeur:{uid: google:<google.id>}
Je sais que ce post existe pendant des mois, mais quand j'ai été confronté à ce problème, il a pris beaucoup de mon temps pour rendre le code plus souple. Base sur Andrew code ci-dessus, j'ai modifié un peu le code.
Exemple de banque de données:
les règles de Sécurité:
Donc userMappings est toujours la première information que nous rechercher lors de la connexion par Facebook, Twitter.... le userMappings' utilisateur pointe vers le compte principal dans utilisateurs. Donc, après la connexion par Facebook ou Twitter, nous pouvons trouver le compte d'utilisateur principal. Dans utilisateurs nous garder de la liste de userMapping qui peut accéder à ses données.
Lors de la création d'un nouvel utilisateur, nous avons créer un compte utilisateurs en premier. L'id de l'utilisateur dans utilisateurs pourrait être quelque chose que nous voulons. C'est flexible, car nous pouvons fournir plus de la méthode d'identification tels que Google, Github sans ajouter de plus à la règle de sécurité.
Je viens de créer un angularfire décorateur de gérer cela pour nous: angularfire-multi-auth
J'ai passé assez de temps à penser à une bonne solution, et à mon avis pour être en mesure de s'enregistrer à partir de n'importe quel fournisseur est juste déroutant. Dans la partie avant de ma fin, je demande toujours pour un enregistrement par e-mail, de sorte qu'un utilisateur d'ouverture de session avec facebook et google+, par exemple, serait connecté en tant qu'utilisateur même lorsqu'il renseigne son adresse e-mail.
De cette façon, les Données de l'Échantillon proposé par Kuma n'avez pas besoin de dupliquer le userMappings.
De L'Échantillon Banque De Données: