MongoDB la conception d'un schéma pour plusieurs comptes d'utilisateur auth
Je suis sur le point de construire mon node.js /express /mangouste /passeport application et je suis à la réflexion sur le droit la conception d'un schéma pour les utilisateurs et les comptes.
Il y aura des utilisateurs loging à partir de twitter et facebook ainsi que de natifs des comptes. À un stade ultérieur, je veux un utilisateur de se connecter à la fois twitter et facebook avec mon application (et peut-être même plus externe des comptes).
Je ne peux pas penser à une bonne solution pour cette situation. Voici les options que je pense:
1.Avoir un modèle de profil de compte et de modèles. Profil de documents représentent l'unique utilisateur, tandis que le compte soit d'utilisateur et mot de passe (compte interne) ou les données d'authentification de l'auth-fournisseur (compte externe). Un profil doit avoir au moins un imbriquée compte de document.
var ExtAccountSchema = new Schema({
type: String, //eg. twitter, facebook, native
uid: String
});
var IntAccountSchema = new Schema({
username: String,
password: String
});
var ProfileSchema = new Schema({
firstname: String,
lastname: String,
email: String,
accounts: [Account] //Pushing all the accounts in there
});
Ce que je n'aime pas ce sont les pas de façon cohérente compte des documents provenant des différentes données de compte et le fait que j'ai du mal à trouver le bon compte lorsque mon utilisateur se connecte (la recherche des uides et des types de compte dans les documents -.-)
2.Avoir toutes les données en un modèle unique
var ProfileSchema = new Schema({
firstname: String,
lastname: String,
email: String,
twitter-uid: String,
facebook-uid: String
password: String
});
Bien, c'est juste laid.- Il pourrait être plus facile, plus rapide à trouver le bon compte de données, mais il n'est pas agréable à entretenir.
Est-il une meilleure solution? Est-il une meilleure pratique?
- Contrairement aux bases de données relationnelles, avec MongoDB le meilleur de la conception du schéma dépend beaucoup de la façon dont vous allez être l'accès aux données. Qu'allez-vous être en utilisant les données de Compte pour, et comment allez-vous y accéder?
- Je vais utiliser les données du compte pour l'authentification avec le passeport. Profil d'accès aux données sur presque chaque page multible fins. Je vais avoir accès par l'entremise de la mangouste ODM
- Donc les données ne seront accessibles que lorsque l'utilisateur se connecte, et vous serez à l'aide d'un mécanisme de session pour garder une trace des connexions une fois que cela arrive? (Par opposition au besoin les données du Compte sur chaque page d'accès.)
- J'aurai besoin de données de l'utilisateur sur chaque page. Mais je ne suis pas sûr de savoir comment le structurer. Dans mes exemples j'ai divisé les données dans les comptes et le profil. Donc, je peux accéder au profil de tous les temps et comptes juste pour la connexion.
Vous devez vous connecter pour publier un commentaire.
1) Il y a trois stratégies que vous pourriez prendre de la structure de vos données dans MongoDB:
Stratégie (un) est le premier que vous décrivez, où le Profil du document contient un tableau de Compte sous-documents.
De la stratégie (b) est similaire à la stratégie (a), mais vous pouvez utiliser un tableau de références à d'autres documents (généralement dans un Compte de collecte) plutôt que d'intégrer les documents réels.
Stratégie (c) est celle que vous décrivez comme "ayant toutes les données dans un modèle unique".
2) Il est généralement considéré comme une bonne Pratique d'utiliser un tableau de documents incorporés, surtout si l'information peut varier. Si il vous rendra la vie plus facile, vous pouvez utiliser une clé pour distinguer le type de compte, comme suit:
3) MongoDB permet de recherche sur un document incorporé. Donc, vous devez écrire la requête suivante (la syntaxe JavaScript):
Avec l'index approprié, cette requête sera assez rapide.
ProfileSchema.index({accounts.kind, accounts.uid},{unique: true, sparse: true});
?