2017-05-11 16 views
0

사용자가 세부 정보를 변경할 수있는 응용 프로그램 사용자의 편집보기가 있습니다. 보기에는 사용자 이름, 전자 메일, 이전 암호 및 새 암호가 포함됩니다. 마찬가지로, 사용자가 이전 암호를 입력하십시오 나는 ajax와 데이터베이스에 사용자가 올바른 이전 암호를 입력했는지 여부를 확인하고 싶습니까? 이전 암호가 맞으면 새 암호를 사용하도록 설정해야합니다. 그렇지 않으면 사용자에게 암호가 잘못되었다는 메시지를 표시해야합니다. 이것을 어떻게 할 수 있습니까? 그것을하기위한 원격 방법이 있습니까?입력 한 이전 암호를 확인하는 방법은 MVC Entity Code-First Approach에서 정확합니까?

보기 모델

[DataType(DataType.Password)] 
    [Display(Name = "Old password")] 
    public string OldPassword { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "New password")] 
    public string NewPassword { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    public string NewPasswordCompare { get; set; } 

아약스 코드

<script> 
    $(document).ready(function() { 
     $("#Verify").click(function() { 
      var oldPassword = $('#Password').val(); 
      $.ajax({ 
       type: "GET", 
       url: "@Url.Action("GetPassword")", 
       data: {'id':@Model.Id, 'password': oldPassword}, 
       datatype: "JSON", 
       success: function (data) { 
        if (data) { 
         console.log("Working"); 
        } 
       } 
      }); 
     }); 
    }); 
</script> 

컨트롤러

public JsonResult GetPassword(string id, string password) 
     { 
      using (var db = new ApplicationDbContext()) 
      { 
       var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
       var user = UserManager.FindById(id); 
       if (UserManager.CheckPassword(user, password)) 
       { 
        return Json(true, JsonRequestBehavior.AllowGet); 
       } 
       else 
       { 
        return Json(false, JsonRequestBehavior.AllowGet); 
       } 
      } 

Ajax 요청이 작동하지 않음.

+0

당신이 그것을 – niksofteng

+0

첫째 나는 이미 시도 시도해야합니다. 여기에 코드를 공유하겠습니다. –

+0

[UserManagerExtensions.CheckPassword] (https://msdn.microsoft.com/en-us/library/dn497468(v=108).aspx) – tchelidze

답변

1

사용이 :

 using (var db = new ApplicationDbContext()) 
     { 
      var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
      var user = UserManager.FindById(id); 
      if (UserManager.CheckPassword(user, password)) 
      { 
       return Json(true, JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       return Json(false, JsonRequestBehavior.AllowGet); 
      } 
     } 
+0

문제는 인수입니다. 두 개의 인수를 전달하지만 컨트롤러는 두 개의 매개 변수/ –

+0

을 수락하지 않습니까? 이드, 패스워드? 귀하의 행동을 보여주십시오 –

+0

업데이트 됨. 나도 이드가 필요해. Id.Identity에 의해 ID를 얻고 싶지 않습니다. –

1

먼저받은 비밀번호를 해싱 한 다음 비교해야합니다.

var UserManager = new UserManager<User>(new UserStore<User>(new ApplicationDbContext())); 

String hashedOldPassword = UserManager.PasswordHasher.HashPassword(password); 
ApplicationDbContext db = new ApplicationDbContext(); 
var result = db.Users.Where(u => u.Id == id && u.PasswordHash == hashedOldPassword).First(); 

.

+0

아래에 빨간색 구불 구불 한가? –

+0

을 User-Model로 변경하면 ** ApplicationUser **가 표시 될 수 있습니다. –

+0

노력하고 있지만 코드가 작동하지 않습니다. 내 코드를 수정했습니다. –