Wbrew pozorom wykorzystanie mechanizmu Membership And Role Providers na platformie ASP .NET MVC nie jest bardzo trudne.
Ja preferuję wykonanie do tego celu osobnego kontrolera (AccountController) oraz zaimplementowanie w nim metod służących do uwierzytelniania i autoryzacji użytkowników.
Przykładowy kod metody Login:
public ActionResult Login(string username, string password, bool? rememberMe){ViewData["Title"] = "Login";// Non-POST requestsif (Request.HttpMethod != "POST"){return View();}List<string> errors = new List<string>();if (String.IsNullOrEmpty(username)){errors.Add("You must specify a username.");}if (errors.Count == 0){bool loginSuccessful = Membership.Provider.ValidateUser(username, password);if (loginSuccessful){FormsAuthentication.SetAuthCookie(username, rememberMe ?? false);return RedirectToAction("Index", "Home");}else{errors.Add("The username or password provided is incorrect.");}}ViewData["errors"] = errors;ViewData["username"] = username;return View();}
Pozostałe metody implementujemy analogicznie pamiętając że zapytanie do nich powinno przyść w metodzie typu POST.
5 komentarze:
Czesc Darek, ciekawy post! Mam tylko jedna watpliwosc - czy nie lepiej byloby uzyc metody FormsAuthentication.RedirectFromLoginPage(...) zamiast RedirectToAction("Index", "Home") ?
słuszne to i sprawiedliwe
teraz tylko jeszcze do tego openid, liveid i cardspace i śmigamy :)
@Marek
Spostrzegawcza uwaga :-) W moim przypadku metoda RedirectFromLoginPage nie jest wymagana, a mówiąc inaczej, nie wprowadza nic nowego prócz przeniesienia użytkownika na stronę startową czyt. zdefiniowaną w Web.congig-u. Ja trochę z lenistwa nie umieściłem tej sekcji w moim Web.confgigu więc skoro cookies-a z poświadczeniami już mam wysłanego, to wystarczy zwykły redirect i efekt jest ten sam.
@Bartek
No tak, to mam zamiar dorobić niebawem :p
@Darek
A nie masz takiego przypadku, ze czesc stron jest dostepna tylko dla zalogowanych uzytkownikow? Jesli tak, to uzytkownik, po zalogowaniu, moze sobie taka strone dodac do ulubionych. Nastepnie wchodzac na nia zostanie oczywiscie automatycznie poproszony o zalogowanie sie. Po zalogowaniu sie, nie chcialby trafic na strone glowna, tylko na strone o ktora prosil, ktora ma w ulubionych. Dlatego zasugerowalem RedirectFromLoginPage()
@Marek
Akurat w tym przykładzie nie miałem takich stron. Jeśli bym miał, to oczywiście RedirectFromLoginPage byłby wręcz konieczne :-)
Prześlij komentarz