2009-08-22 6 views
14

ASP.NET MVC 데모와 함께 제공되는 표준 SqlMembershipProvider를 사용하고 있습니다.ASP.NET MVC에서 "비밀번호 찾기"를 어떻게 구현해야합니까?

내 사이트에 "비밀번호 찾기"링크를 구현하는 데 관심이 있습니다.

이 기능을 구현하는 올바른 방법은 무엇입니까? 임시 비밀번호로 비밀번호를 덮어 써서 등록 된 이메일로 이메일로 보내야합니까?

답변

8

당신을 위해 리셋을 자동으로됩니다 제공 :

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

샘플은 단지 사용자가 이메일의 브라우저에 새 암호를 대신 반환하지만 구성 할 수 있습니다 비밀 질문/답변 사용 공급자.

이 샘플은 암호와 이메일을 얻을 수 그것을 :

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

나도 방법이 안전하다고 생각합니다. 사용자가 계정을 해킹하기 위해 질문/답변 및 전자 메일 암호를 알아야하기 때문에 단계별 전자 메일은 조금 안전합니다.

나는이 샘플들이 MVC를 사용하지 않는다는 것을 깨닫는다. 그러나 나는 당신이 갈 수 있다고 확신한다. : 응용 프로그램의 특성에 기반

10

는 비밀번호 분실에 대한 가장 좋은 방법은 사용자가 3 ~ 5 최대의 비밀/질문을 확인 할 수 있도록 허용하기 위해

  1. 다음에 있어야합니다 시도
  2. 유효성이 확인되면 무작위로 생성 된 암호과 24 시간의 유효성을 전자 메일로 보냅니다.
  3. 전자 메일에 만 만 포함하고 사용자 이름/암호는 포함하지 않아야합니다.
  4. 사용자가 임시 비밀번호로 로그인하면 사용자는 홈 페이지로 이동하기 전에 새 비밀번호을 생성해야합니다.
6

URL을 추측하는 것이 불가능한 링크를 사용자에게 이메일로 보내는 것이 좋습니다 (예 : 임의의 Guid가 포함 된 경우). 사용자가 URL을 클릭하면 비밀번호를 재설정 할 수 있습니다. 하나 개의 사용에 대해서만합니다. 그것은 당신이 사용하고있는 멤버 자격 공급자의 유형을 따라

5

. 설정된 시간 후 을 만료해야하지만 여기 please visit the following link

은 자세한 내용에 대한 인증을위한 간단한 멤버 자격 공급자를 사용하는 것이 좋습니다 것입니다 몇 가지 코드

[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(); 
      } 
     } 
관련 문제