2017-12-18 270 views
1

我正在开发一个API,其中我实现了Login和ResetPassword功能。登录工作正常,并且resetPassword也可以正常工作。但是,当我重置密码并尝试使用新密码登录时,登录失败。重置后,我可以看到哈希和密码字段得到更新,但登录失败。我正在使用下面的代码进行重置。身份MVC更改密码,然后登录

if (user.VerificationCode == model.VerificationCode) 
    { 
     //var newPasswordHash = UserManager.PasswordHasher.HashPassword(model.NewPassword); 
     //var token = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 
     //user.PasswordHash = newPasswordHash; 
         user.Password = model.NewPassword; 
     //IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, token, newPasswordHash); 
     //IdentityResult result = await UserManager.ChangePasswordAsync(user.Id, user.Password, model.NewPassword); 
     var result = await UserManager.UpdateAsync(user); 

     if (!result.Succeeded) 
     { 
      response.Message = AppConstants.Error; 
      response.IsSuccess = false; 
     } 
     else 
     { 
      response.Message = AppConstants.OperationSuccessful; 
      response.IsSuccess = true; 
     } 

} 

而对于使用登录的SignInManager.PasswordSignInAsync已经给代码。 任何想法在这里做错了什么?

回答

0

如果你想使用UpdateAsync方法,你应该先哈希密码: 此方法为我工作:

 public async Task<IHttpActionResult> changePassword(UsercredentialsModel usermodel) 
{ 
    ApplicationUser user = await AppUserManager.FindByIdAsync(usermodel.Id); 
    if (user == null) 
    { 
    return NotFound(); 
    } 
    user.PasswordHash = AppUserManager.PasswordHasher.HashPassword(usermodel.Password); 
    var result = await AppUserManager.UpdateAsync(user); 
    if (!result.Succeeded) 
    { 
    //throw exception...... 
    } 
    return Ok(); 
} 

您可以使用ASLO和RemovePasswordAsync一起AddPasswordAsync更改密码:

await UserManager.RemovePasswordAsync(userId.Id); 

var result = UserManager.AddPasswordAsync(NewPassword); 
相关问题