J'ai vécu cela avec sled.com. Il existe de multiples problèmes ici en ce qui concerne la création des comptes et de la prise en charge de plusieurs comptes de tiers pour la connexion. Certains d'entre eux sont:
- Avez-vous besoin pour soutenir à la fois un mot de passe local et le tiers de connexions?
Pour sled.com j'ai décidé de laisser tomber le mot de passe locaux en raison de la petite valeur qu'il ajoute un coût supplémentaire dans l'obtention d'un mot de passe formulaire de participation. Il existe de nombreuses attaques connues pour casser les mots de passe et si vous allez introduire des mots de passe, vous devez vous assurer qu'ils ne sont pas facile à briser. Vous avez également besoin de les stocker dans un one-way hash ou quelque chose de similaire pour empêcher leur fuite.
- Combien de flexibilité voulez-vous autoriser dans la prise en charge de plusieurs comptes de tiers?
Il sonne comme vous avez déjà choisi les trois fournisseurs de connexion: Facebook, Twitter, et LinkedIn. C'est excellent, car cela signifie que vous êtes en utilisant OAuth et de travailler avec un ensemble bien défini de fournisseurs de confiance. Je ne suis pas fan de OpenID. La question qui reste est de savoir si vous avez besoin de prendre en charge plusieurs comptes de tiers à partir du même fournisseur (par exemple, un compte local avec deux comptes Twitter liés). Je suppose que non, mais si vous le faites, vous aurez besoin de les accueillir dans votre modèle de données.
Pour de Traîneau, nous soutenons la connexion avec Facebook, Twitter et Yahoo! et au sein de chaque compte d'utilisateur de stocker une clé pour chacun d'eux: { "_id":"djdjd99dj", "yahoo":"dj39djdj",twitter:"3723828732","facebook":"12837287"}. On a mis en place un tas de contraintes pour s'assurer que chaque compte tiers ne peut être liée qu'à un seul compte local.
Si vous allez permettre à plusieurs comptes du même fournisseur tiers, vous aurez besoin d'utiliser des listes ou d'autres structures de soutien, et avec cela, toutes les autres restrictions afin d'assurer l'unicité.
- Comment lier plusieurs comptes?
La première fois que l'utilisateur se connecte à votre service, ils ont d'abord aller à un fournisseur tiers et revenir avec un vérifiées par tierce partie id. Ensuite, vous créez un compte local pour eux et de recueillir toutes les informations que vous souhaitez. Nous recueillons leur adresse e-mail et leur demander de choisir un nom d'utilisateur local (nous essayons de pré-remplir le formulaire avec leur nom d'utilisateur existant de l'autre fournisseur). Avoir une certaine forme locale identifiant (adresse email, nom d'utilisateur) est très important pour la récupération de compte plus tard.
Le serveur sait que c'est un premier temps de connexion si le navigateur n'avez pas un cookie de session (valide ou expiré) pour un compte existant, et que le tiers compte utilisé n'est pas trouvé. Nous essayons d'informer l'utilisateur qu'ils ne sont pas seulement d'enregistrement, mais la création d'un nouveau compte, de sorte que si ils ont déjà un compte, qu'ils vont mettre en pause et de se connecter avec leur compte existant au lieu.
Nous utilisons exactement le même flux pour ajouter d'autres comptes, mais lorsque l'utilisateur revient à partir de la troisième partie, la présence d'un valide cookie de session est utilisé pour faire la distinction entre une tentative de lier un nouveau compte pour une action login. Nous n'autorisons qu'un seul compte tiers de chaque type et si il est déjà lié, de bloquer l'action. Il ne devrait pas être un problème parce que l'interface de lier un nouveau compte est désactivé si vous avez déjà un (par le fournisseur), mais juste au cas où.
- Comment fusionner des comptes?
Si un utilisateur a tenté de lier un nouveau compte tiers qui est déjà lié à un compte local, vous devez simplement vous invite à confirmer qu'ils veulent fusionner les deux comptes (en supposant que vous pouvez gérer un tel fusionner avec votre jeu de données - souvent plus facile à dire qu'à faire). Vous pouvez également leur donner une touche spéciale à la demande d'une fusion, mais dans la pratique, ils sont tous en train de faire est de relier un autre compte.
C'est une bien jolie machine d'état. L'utilisateur revient à partir de la troisième partie à un tiers l'id de compte. Votre base de données peut être dans l'un des trois états suivants:
- Le compte est lié à un compte local et aucun cookie de session est
--> Connexion
- Le compte est lié à un compte local et un
cookie de session est présent --> Fusion
- Le compte n'est pas lié à une
compte local et aucun cookie de session est présent --> Inscription
-
L'
compte n'est pas lié à un compte local et un cookie de session est
--> les liens de compte Supplémentaire
- Comment faire pour effectuer la récupération de compte avec des tiers fournisseurs?
C'est encore expérimental territoire. Je n'ai pas vu un parfait UX pour ce que la plupart des services de fournir à la fois un mot de passe local à côté pour les comptes de tiers et, par conséquent, se concentrer sur le "j'ai oublié mon mot de passe" cas d'utilisation, pas tout ce qui peut aller mal.
Avec de Traîneau, nous avons opté pour l'utilisation de "Besoin d'aide pour connecter?" et lorsque vous cliquez sur, demander à l'utilisateur de leur e-mail ou nom d'utilisateur. On en cherche et si nous trouvons un compte correspondant, e-mail que l'utilisateur un lien qui peut se connecter automatiquement dans le service (pour une fois). Une fois dedans, nous amène directement sur le compte de liaison de la page, dites-leur qu'ils devraient prendre un coup d'oeil et éventuellement d'autres comptes, et de leur montrer que les comptes de tiers qu'ils ont déjà liés.