2009-09-16 13 views
5

Wiem, że to może brzmieć jak coś, co jest wyjaśnione wszędzie .. ale oglądałem wiele filmów na temat asp.net/learn czytających artykuły - i wciąż brakuje czegoś, co wyjaśnia, jak łączy się to "członkostwo".Użytkownicy ASP.NET/Membership/MembershipUser/Security/Principal/Profile ... HELP

Z jednej strony jest to wbudowane zarządzanie użytkownikami .net, które pozwala na tworzenie ról, użytkowników itp. Z drugiej strony, uzyskanie tego użytkownika, przechowywanie go (w sesji itp.) Wydaje się dziwnym zadaniem , z tego, co przeczytałem, polegające na tworzeniu własnych "głównych obiektów" itd.

Jeśli jest ktoś, kto ma zrozumienie i czas, może dać nam (mnie) krótkie wyjaśnienie tego, co jest ze wszystkimi to. Być może w jaki sposób są ze sobą powiązane ... Jak używać nazwy użytkownika/hasła typu string, aby sprawdzić, czy konto istnieje, zalogować się, sprawdzić, czy są one we właściwej roli dla działania, czy nawet uzyskać wszystkie role, które użytkownik jest częścią?

Wiem, że to pytanie może nie pasować do osób, które dobrze znają użytkowników .net, ale odpowiedz tylko, jeśli możesz pomóc.

Wielkie dzięki z góry. peteski

Odpowiedz

6

Nie musisz w ogóle tworzyć własnego obiektu głównego. Wszystko, co możesz zrobić, to użyć jednego z gotowych programów MembershipProvider (np. SQLMembershipProvider), aby zarządzać swoim użytkownikiem i użyć jednego z RoleProvider (np. SQLRoleProvider), aby ustawić autoryzację dla użytkowników, jeśli jest to wymagane.

Aby uzyskać użytkownika, nie trzeba go przechowywać w sesji. Po prostu użyj Page.User, aby uzyskać podstawowe informacje o użytkowniku (nazwa, IsAuthenticated).

Aby sprawdzić, czy użytkownik, jeśli poświadczenia użytkownika są prawidłowe, można użyć

Membership.ValidateUser(username,password). 

Aby zalogować, proponuję użyć dostarczonego kontrolę ASP.NET Logowanie ale można kod własny login z trochę więcej pracy. Jeśli używasz uwierzytelniania formularzy, to coś jak:

if (Membership.ValidateUser(UsernameTextbox.Text, PasswordTextbox.Text)) 
    FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text, NotPublicCheckBox.Checked); 
else 
    Msg.Text = "Login failed. Please check your user name and password and try again."; 

PS: Przykład pochodzi z MSDN

Wreszcie, aby sprawdzić, czy użytkownik może wykonać działanie, należy użyć

RoleProvider.IsUserInRole(username,rolename) 

Ty może również kontrolować dostęp do zasobu (strony, pliku, folderu itp.) przez autoryzację konfiguracji w web.config np:

< autoryzacja> < odmówić użytkownikom = "?" /> < pozwalają role = "Administratorzy" /> < zaprzeczyć users = "*" /> </authorization>

Nadzieja to pomóc i spadał swobodnie zapytać o więcej informacji, jeśli nie jest to oczywiste

Edit

Aby odpowiedzieć na komentarz, oto jak to działa:

stronę.Użytkownik korzysta z pliku cookie uwierzytelniającego w celu identyfikacji aktualnie zalogowanego użytkownika. Ten plik cookie jest automatycznie ustawiany w FormsAuthentication.RedirectFromLoginPage, ale jeśli chcesz ustawić bieżącego użytkownika bez przekierowania, możesz ręcznie wywołać FormsAuthentication.SetAuthCookie (nazwa użytkownika, persistentCookie), gdzie persistentCookie jest wartością logiczną informującą, czy chcesz, aby to ciasteczko było trwałe lub nie w przeglądarce.

Mam nadzieję, że wyjaśniono oryginalną odpowiedź

+0

Witam Martina, to trochę pomaga - praktycznie. A co jeśli nie chcę przekierowywać użytkownika z jednej strony na drugą ... Jaką metodę ustawia użytkownik.Użytkownik (tj. Loguje go). Czy robi to RedirectFromLoginPage? (intelliencja nie wyjaśnia tego jasno). Szukałem również wyjaśnienia, co robi każda część członkostwa (aby pomóc mi to zrozumieć i dla odniesienia). Ale dziękuję ci za odpowiedź! Bardzo doceniane! – peteski

+0

Teraz odkryłem, że przy użyciu FormsAuthentication.SetAuthCookie(); Mogę "zalogować użytkownika". Następnie przekierowuję z powrotem na tę samą stronę, na której mogę dodać logikę do obsługi różnych ról itp. – peteski