2017-12-18 22 views
1

私は、ログインとResetPassword機能を実装したAPIを開発中です。ログインは正常に動作し、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(); 
} 

あなたがパスワードを変更するために一緒に使用RemovePasswordAsyncAddPasswordAsyncをasloことができます。

await UserManager.RemovePasswordAsync(userId.Id); 

var result = UserManager.AddPasswordAsync(NewPassword);