2009-08-22 10 views
14

Używam standardowego SqlMembershipProvider dołączonego do wersji demonstracyjnej ASP.NET MVC.Jak powinienem wdrożyć "Zapomniałem hasła" w ASP.NET MVC?

Jestem zainteresowany wdrożeniem linku "Nie pamiętam hasła" na mojej stronie.

Jaki jest prawidłowy sposób wdrożenia tej funkcji? Czy powinienem zastąpić hasło tymczasowym i wysłać je e-mailem na zarejestrowany adres e-mail?

Odpowiedz

8

Dostawca będzie automatycznie zrobić reset dla Ciebie:

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.resetpassword.aspx

Próbkę po prostu zwraca nowego hasła do przeglądarki zamiast wysyłając użytkownikowi ale wykorzystuje tajne pytanie/odpowiedź, która może być skonfigurowana z dostawca.

Ta próbka dostaje hasło i e-maili to:

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.getpassword.aspx

myślę albo podejście jest bezpieczny. E-mail z krokiem jest nieco bezpieczniejszy, ponieważ użytkownik będzie musiał znać pytanie/odpowiedź i hasło e-mail, aby włamać się na konto.

Zdaję sobie sprawę, że te próbki nie używają MVC, ale jestem pewien, że wystarczy, abyś zaczął. :)

10

podstawie charakteru wniosku, Najlepsze praktyki dla Zapomniałem hasła powinny być w następującej kolejności

  1. Zezwalaj użytkownikowi na sprawdzenie Tajny/Pytanie dla maksymalnie 3 do 5 próby
  2. Po pomyślnym sprawdzeniu poprawności, Wyślij wiadomość e-mail z losowo wygenerowanym hasłem z ważnością 24 godzin.
  3. E-mail musi zawierać tylko hasło, ale nie zarówno nazwę użytkownika/hasło.
  4. Gdy użytkownik loguje się tymczasowym hasłem, użytkownik musi zostać zmuszony do utworzenia nowego hasła przed przejściem do strony głównej.
6

Z pewnością lepiej jest wysłać użytkownikowi link z jakimś niemożliwym do odgadnięcia URL (np. Zawierający losowy Guid), gdy użytkownik kliknie adres URL, jest w stanie zresetować hasło. Adres URL powinien być dobry tylko dla jednego użycia i powinien wygasnąć po określonym czasie.

5

to zależy jaki rodzaj dostawcę członkostwa używasz. Ale ja polecam przy użyciu prostych dostawcę członkostwa do uwierzytelniania dla bardziej szczegółowo please visit the following link

Oto jakiś kod dla ciebie

[HttpPost] 
[AllowAnonymous] 
public ActionResult ForgotPassword(ForgotPasswordModel model) 
    { 
     . 
     . 
     . 
     . 
       if (WebSecurity.UserExists(model.UserName)) 
       { 
       var token = WebSecurity.GeneratePasswordResetToken(model.UserName, 60); 
        . 
        . 
        . 
        .       
        // send this token by email 
       } 
       else 
       { 
        ModelState.AddModelError("", "Could not find User"); 
       } 
      } 
     return View(model); 


    } 

[HttpPost] 
    public ActionResult ResetPassword(ResetPasswordModel model) 
    { 
     string token = Request.Params["token"]; 
     if (!string.IsNullOrEmpty(token)) 
     { 
      if (WebSecurity.ResetPassword(token, model.NewPassword)) 
      { 
     // send email…….. or           
       return View(); 
      } 
     } 
Powiązane problemy