Question

Je stocke les données utilisateur dans une table MSSQL appelée Users. Ce que je veux, c’est que toutes les données de l’utilisateur soient accessibles pour l’utilisateur réellement connecté (e-mail, adresse, téléphone, si l’utilisateur est abonné, etc.).

Je ne veux pas utiliser de profils, j'ai donc choisi d'utiliser MembershipProvider (ou connaissez-vous une méthode plus simple et moins douloureuse?).

Ce que je ne comprends pas, c'est MembershipUser et Membership. Si j’hérite de MembershipProvider, dans les méthodes remplacées, je contrôle les données d’accès depuis et vers la base de données.

Mais comment utiliser la classe héritée de MembershipProvider? Si je veux authentifier un utilisateur à l'aide de l'appartenance, je devrais faire:

if(Membership.ValidateUser(string username, string password))
{
   FormsAuthentication.RedirectFromLoginPage(string username, string password);
}

Mais où la classe est-elle héritée de MembershipProvider? Et quand utiliser une classe héritée de MembershipUser? Et quelle est la relation entre l'adhésion et MembershipProvider?

Était-ce utile?

La solution

Bien que sur MSDN ne soit pas parfaitement clair, ce n'est pas tout. c'est compliqué. Il y a un trio de classes:

  • Membership: fournit des méthodes d’utilité et un point d’entrée - essentiellement un Singleton (classe statique).
  • MembershipProvider: agit comme un accesseur de données et une fabrique pour les objets MembershipUser.
  • MembershipUser: représente un utilisateur individuel.

Un MembershipProvider personnalisé est sélectionné (par code dans Membership) en fonction de la configuration de votre application: configuration / system.web / membership. Voici où vous amenez votre fournisseur en jeu. Votre implémentation MembershipProvider doit être écrite pour accéder à tout magasin de données que vous préférez pour les utilisateurs: votre table User dans ce cas.

Les objets MembershipUser ne sont créés que par l'intermédiaire de MembershipProvider. La méthode MembershipProvider.ValidateUser () doit vérifier dans votre magasin de données que la combinaison utilisateur / mot de passe est valide. MembershipProvider.GetUser () récupère les informations sur l'utilisateur. Utilisez-les dans une page protégée contre les accès et transmettez-les à System.Web.HttpContext.Current.User.Identity.Name en tant qu'utilisateur authentifié actuel.

Ceci dit, j'espère que vous êtes sûr de ne pas vouloir utiliser Profils , et que vous souhaitez réellement disposer d'un tableau d'utilisateurs distinct. Si vous écrivez une application interne, utilisez un Active Directory ou Un magasin de données compatible LDAP permettrait de réduire les coûts d'administration et probablement les risques de sécurité. Il y a des centaines de choses que vous pouvez facilement faire mal lorsque vous vous rendez sur la voie MembershipProvider. Utilisez-vous des hachés salés ? Comment protégez-vous la table User contre la manipulation? MSDN couvre seulement une fraction des problèmes de sécurité auxquels vous pouvez être confrontés.

Autres conseils

Le fournisseur spécifique utilisé est contrôlé sur le fichier web.config. En fait, vous pouvez définir plus d'un fournisseur et en avoir un par défaut. Vérifiez: http://msdn.microsoft.com/en-us/library/ 6e9y4s5t.aspx .

Lorsqu'il est appelé comme ça, l'appartenance n'utilise que le fournisseur par défaut. Si vous souhaitez fournir des informations supplémentaires à l'utilisateur, vous hériteriez de MembershipUser, mais cela lierait le reste de votre code à votre fournisseur spécifique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top