2010-04-18 10 views
0

Je viens dans ASP.NET de PHP alors la raison pour laquelle je pose ma question est parce que c'est la nature totalement différente de la façon dont l'application fonctionne et gère les demandes.Authentification modèle - meilleures pratiques

bien, j'ai une table existe avec creditians utilisateur, tels que: id, login, mot de passe (sha haché), e-mail, téléphone, chambre

j'ai construit fournisseur d'appartenances personnalisé de sorte qu'il peut gérer mon propre schéma d'authentification de base de données.

et maintenant je suis confus, parce que User.Identity.Name contient uniquement la connexion de l'utilisateur, mais pas l'objet complet (j'utilise linq2sql pour communiquer avec la base de données et j'ai besoin de son objet Utilisateur pour fonctionner). Aux applications php je stocke simplement l'objet utilisateur à une méthode statique à la classe Auth (ou un autre), mais ici à ASP.NET MVC je ne peux pas faire cela, car le membre statique est partagé entre toutes les demandes et permanent, et non vit à l'intérieur de la demande actuelle (comme c'était le cas pour php).

donc ma question est: comment et où dois-je récupérer et stocker l'objet utilisateur linq2sql pour travailler avec elle dans la demande actuelle et seulement en cours? (Une fois la demande traitée avec succès, je m'attends à ce qu'elle soit éliminée de la mémoire et à la prochaine demande sera créée à nouveau). Ou suis-je tout à fait fausse?

Répondre

1

Si vous avez implémenté MembershipProvider, vous savez qu'il dispose d'une méthode GetUser, qui reçoit un objet MembershipUser basé sur un nom d'utilisateur.

Dans n'importe quelle page de votre projet, si vous exécutez Membership.GetUser(), la méthode GetUser (nom d'utilisateur) est exécutée dans le fournisseur d'authentification actuellement activé. Dans une solution de base simple, cet appel ira à la base de données et obtenir les détails de l'utilisateur chaque fois que vous y accédez.

Ce que j'ai fait dans mon projet est de stocker l'utilisateur actuel dans la variable Session. De cette façon, la session de navigation actuelle pour cet utilisateur va stocker l'objet utilisateur. C'est simple, et c'est bien, car l'authentification ASP.NET est basée sur la session en cours. Une chose à noter - chaque fois que l'utilisateur se déconnecte, vous devez effacer cette variable de session. Dans mon cas, j'utilise Session.Abandon() juste pour être sûr. Autre que cela - c'est l'approche que j'ai utilisée jusqu'ici et ça marche super!