L'obtention de l'id de l'utilisateur courant (pas de nom) à l'aide de l'authentification par formulaires?

Question:

Je suis à jouer avec les formes d'authentification et de mon propre fournisseur d'appartenances.

De ce que je vois, je peux obtenir le courant FormsIdentity par:

System.Web.Security.FormsIdentity veryFunny= (System.Web.Security.FormsIdentity)
    System.Web.HttpContext.Current.User.Identity;

Et je peux obtenir la composition actuelle de l'utilisateur:

        var UserFromDb = System.Web.Security.Membership.GetUser();

Et puis je peux obtenir le nom d'utilisateur par:

var MyUserId = UserFromDb.ProviderUserKey;

Ce que je trouve drôle, c'est que quand j'appelle à l'Adhésion.GetUser(), puis il appelle cette méthode dans le fournisseur d'appartenances

public override MembershipUser GetUser(string username, bool userIsOnline)

Qui regarde les informations de l'utilisateur dans la base de données.

Donc ce que j'ai compris, c'est que l' .NET framework interne ne

GetUser(System.Web.HttpContext.Current.User.Identity.Name, whatever);

qui reçoit les infos de l'utilisateur de la base de données basé sur le nom d'utilisateur.
Je trouve cela inquiétant, d'abord parce que c'est mauvais pour la performance lorsque je recherche un utilisateur en entier juste pour obtenir le nom d'utilisateur.

Deuxième, il est troublant de constater que je recherche le nom d'utilisateur à tous, parce que c'est pas ce à quoi je m'attends.

Troisième, c'est perturbant, parce que le nom d'utilisateur peut être modifié dans le cadre du programme, et il est absurde d'avoir à l'utilisateur d'avoir à vous déconnecter et reconnecter pour le faire.

Maintenant, pour moi, cette conception des sons comme non-sens.

Mais là encore, microsoft utilise également le nom de l'application, le nom du groupe, et le nom d'utilisateur en tant que clé primaire, qui aussi n'a pas vraiment beaucoup de sens.

Alors, voici ma question:

N'est-il pas un moyen d'obtenir l'ID de l'utilisateur sans DB de recherche ?

Ou est l'ensemble des Membres fournisseur idée tellement brisé par le design ?

Si elle est tellement brisé:

J'ai vu que FormsIdentity a une chaîne de propriété appelée userdata.
Si oui, comment puis-je utiliser ASP.NET pour enregistrer le nom d'utilisateur ?

Bienvenue à l'ASP.NET les fournisseurs d'appartenance; la recherche d'exemples de conception de haute qualité dans ces fournisseurs peuvent prouver, euh, frustrant.

OriginalL'auteur Stefan Steiger | 2013-04-26