2010-09-15 26 views
7

Tworzę własną stronę internetową i blog i chcę po raz pierwszy tylko ja w bazie danych (moje imię i hasło), a może później trochę rejestracji dla innych, ale najpierw zaloguj się tylko dla mnie i administracja z autoryzacją. Nie chcę używać członkostwa ze stwardnienia rozsianego. Chcę spróbować stworzyć własną od początku, więc szukam przewodnika dla początkujących, ale znalazłem dużych przewodników z ról, praw. Chcę tylko mały przykład z nazwą użytkownika, hasłem w bazie danych z danymi logowania. Dzięki za pomoc LiborNiestandardowe członkostwo ASP.NET MVC dla początkujących

+0

Witam, czy już na boisko w drogę do bazy danych? (framework podmiotu, linq2sql, ado.net?) – Michel

Odpowiedz

5

Nawet jeśli nie chcesz korzystać z magazynu danych dostawcy członkostwa i rola nadal można korzystać z uwierzytelniania. Zaufaj mi, to dużo łatwiejsze niż budowanie własnego. Oto, jak to działa:

Powiemy, że masz już swoją konfigurację pamięci użytkownika do pobierania nazwy użytkownika i hasła. Dla uproszczenia zamierzam udawać, że masz statyczną klasę o nazwie DataLayer, która zawiera twoje metody pobierania danych do wyciągania informacji z bazy danych (lub jakiejkolwiek używanej pamięci).

Najpierw potrzebujesz sposobu na zalogowanie się użytkownika. Stwórz stronę z polami nazwy użytkownika i hasła. Następnie w sposobie działania, że ​​słupki strona skonfigurować szybkie if:

if (DataLayer.UserExists(userModel.Username)) 
    { 
     User userFromDB = DataLayer.GetUser(userModel.Username); 
     if (userFromDB.Password == userModel.Password) 
     { 
       FormsAuthentication.SetAuthCookie(userFromDB.Username, checkBoxRememberMe.Checked); 
       //Use userFromDB as the username to authenticate because it will 
       //preserve capitalization of their username the way they entered it 
       //into the database; that way, if they registered as "Bob" but they 
       //type in "bob" in the login field, they will still be authenticated 
       //as "Bob" so their comments on your blogs will show their name 
       //the way they intended it to. 

       return "Successfully logged in!"; 
     } 
    } 

    return "Invalid username or password."; 

Teraz, gdy są one uwierzytelnione można po prostu użyć Page.User.Identity.IsAuthenticated w kodzie, aby dowiedzieć się, czy są one rejestrowane w tak:.

if (User.Identity.IsAuthenticated) 
{ 
    DataLayer.PostBlogComment(User.Identity.Name, commentBody); 
    //Then in your controller that renders blog comments you would obviously 
    //have some logic to get the user from storage by the username, then pull 
    //their avatar and any other useful information to display along side the 
    //blog comment. This is just an example. 
} 

Dodatkowo można zablokować całe metod działania lub nawet całych kontrolery do użytkowników, które są poświadczone przez dostawcę uwierzytelniania formularzy. Wszystko co musisz zrobić, to dodać tagi, takie jak te do metod działania/kontrolerów:

[Authorize] 
public ActionResult SomeActionMethod() 
{ 
    return View(); 
} 

Atrybut [Authorize] uniemożliwi użytkownikom, które nie są zarejestrowane w dostęp do tej metody działania i będzie przekierować je do strony logowania. Możesz użyć tego samego atrybutu do odfiltrowania ról, jeśli używasz wbudowanego dostawcy ról.

[Authorize(Roles="Admin, SalesReps")] 
public ActionResult SomeActionMethod() 
{ 
    return View(); 
} 

Te atrybuty mogą być również dodane powyżej klasie kontrolera zastosować to logika całego sterownika.

EDIT: Aby zalogować się użytkownikowi wszystko, co musisz zrobić, to zadzwonić FormsAuthentication.SignOut();

1

Hej @Bibo, dobry do nie wyboru dostawców członkostwa. Myślę, że wystarczy usługa UserService lub podobna, która zapewnia metody tworzenia, uwierzytelniania użytkowników i kilka innych metod. Jako sugestię użyj hasła hashującego i hasła do hasła użytkownika. Here to dobry link do obejrzenia. Spójrz też na this answer Dałem trochę czasu temu.

Powodzenia!

EDYCJA: Parametr rememberMe powinien mieć nazwę keepMeSignedIn.

+0

Dzięki za asnwer, ale nie mogę znaleźć niczego, co może mi pomóc. Czy możesz połączyć jakiś artykuł na ten temat? –

+1

CodeCampServer http://codecampserver.codeplex.com/ to przykładowa aplikacja, która implementuje to, czego szukasz. – uvita

1

Ten artykuł na temat uwierzytelniania formularzy daje mnóstwo informacji na temat tworzenia własnego prostego systemu bezpieczeństwa, w szczególności trochę o formularzu FormsAuthenticationTicket.

http://support.microsoft.com/kb/301240