2013-01-18 1 views
3

ASP.NET MVC 4 웹 응용 프로그램에서 작업하고 있는데 암호를 잊어 버리려고합니다. 내 POST, 나는 암호에 관련된 사용자가 현재WebSecurity.GeneratePasswordResetToken이 오류를 반환합니다 (사용자는 존재합니다!)

WebSecurity.UserExists(email) 

것을 확인하고는 사실를 반환하지만 내가

WebSecurity.GeneratePasswordResetToken(email, 10); 

을 exectue 때이 오류

No account exists for *email* 
받고 있어요

참고로이 튜토리얼의 내용은 http://www.thecodingguys.net/tutorials/asp/webpages-membership-forgot-password-and-reset-password입니다.

아이디어가 있으십니까?

답변

5

해결되었지만 [webpages_Membership] 테이블에 사용자 확인이 표시되지 않았습니다.

+0

나에게 일어났다. 표의 데이터를 확인하십시오. 테스트하는 동안 webpages_Membership 항목없이 Userprofile 항목을 갖는 것이 쉽습니다. – ekenman

+0

하지만 왜? 당장 수동으로 입력 할 수는 없습니다. –

4

사용자가 확인되지 않은 경우에도 동일한 오류가 발생합니다. 내가 누군가를 도울 수 있도록 알아 내기 위해 잠시 나갔다. 아마 누군가는 해커 일종의이기 때문에, 그것을하는 더 좋은 방법이 있습니다.

필자의 경우 클라이언트는 사용자에게 메일로 비밀번호를 보내려고합니다. (알고 있습니다 ....) 메일을 다시 보내야 할 경우 새 비밀번호를 생성해야합니다.

private string ChangePasswordForNotConfirmedUser(string emailAdress) 
    { 
     var membership = _membershipRepository.GetByUserName(emailAdress); 
     membership.IsConfirmed = true; 
     _membershipRepository.Save(membership); 
     var token = WebSecurity.GeneratePasswordResetToken(emailAdress); 
     var password = Membership.GeneratePassword(GlobalSettings.PasswordLenght, GlobalSettings.PasswordNoAlphaChars); 
     WebSecurity.ResetPassword(token, password); 
     membership.IsConfirmed = false; 
     _membershipRepository.Save(membership); 
     return password; 
    } 
4

이것은 다른 것에 대해 생각하지 않고 나를 위해 문제를 해결했습니다.

try 
     { 
      token = WebSecurity.GeneratePasswordResetToken(username); 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message.Contains("No account")) 
      { 
       string password = System.Web.Security.Membership.GeneratePassword(6, 0); 
       WebSecurity.CreateAccount(username, password); 

      } 
      token = WebSecurity.GeneratePasswordResetToken(username); 
     } 
관련 문제