Używam uwierzytelniania formularzy i mojego własnego dostawcy członkostwa niestandardowego.
Z tego co widzę, mogę uzyskać aktualny FormsIdentity wykonując:
System.Web.Security.FormsIdentity veryFunny= (System.Web.Security.FormsIdentity)
System.Web.HttpContext.Current.User.Identity;
I mogę dostać bieżącego użytkownika Membership ten sposób:
var UserFromDb = System.Web.Security.Membership.GetUser();
A potem można uzyskać identyfikatora w ten sposób:
var MyUserId = UserFromDb.ProviderUserKey;
Co znajdę zabawne jest to, że gdy zgłoszę Membership.GetUser(), a następnie go calles tej metody w dostawcę członkostwa
public override MembershipUser GetUser(string username, bool userIsOnline)
który wygląda się informacje o użytkowniku w bazie danych.
Więc co pomyślałem, to że ramy .NET wewnętrznie robi
GetUser(System.Web.HttpContext.Current.User.Identity.Name, whatever);
który pobiera informacje użytkownika z bazy danych na podstawie nazwy użytkownika. Uważam, że jest to niepokojące, ponieważ jest to złe dla wydajności, gdy muszę wyszukać użytkownika, aby uzyskać identyfikator użytkownika.
Po drugie, niepokojące jest to, że muszę w ogóle wyszukać użytkownika, ponieważ tego nie oczekiwałbym.
Po trzecie, jest to niepokojące, ponieważ nazwa użytkownika może zostać zmieniona w trakcie programu, a to bzdura, aby użytkownik musiał się wylogować i zalogować, aby to zrobić.
Teraz dla mnie ten projekt brzmi jak bzdura.
Ale potem znowu, Microsoft używa również nazwy aplikacji, nazwy grupy i nazwy użytkownika jako klucza podstawowego, co również nie ma większego sensu.
Oto moje pytanie:
Czy nie można uzyskać identyfikatora użytkownika bez wyszukiwania bazy danych?
A może pomysł dostawcy członkostwa jest tak połamany przez projekt?
Jeśli jest uszkodzony:
Widziałem, że FormsIdentity ma właściwość string o nazwie userdata. Jeśli tak, jak mogę użyć ASP.NET, aby zapisać tam identyfikator użytkownika?
Witamy w usługodawcach członkowskich ASP.NET; szukanie przykładów wysokiej jakości projektów u tych dostawców może okazać się frustrujące. –