I am using ASP.NET Identity 2 with Entity Framework 5 (because our Oracle data provider does not support EF6). For some reason, password verification using UserManager.PasswordHasher.VerifyHashedPasswordcontinues to fail.
My class UserStorecontains:
public Task SetPasswordHashAsync(IccmUser user, string passwordHash)
{
IPasswordHasher hasher = new PasswordHasher();
var t = Task.Run(() => {
user.PasswordHash = hasher.HashPassword(passwordHash);
});
return t;
}
The password (explicitly hashed) is stored in the database. Thus, this code works very well.
My AccountControllerperforms a password check as follows:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(SignInModel model, string returnUrl)
{
if (ModelState.IsValid) {
PasswordVerificationResult result = PasswordVerificationResult.Failed;
IccmUser user = await UserManager.FindByNameAsync(model.UserName);
if (user == null) {
ModelState.AddModelError("", "Couldn't find the user.");
} else {
result = UserManager.PasswordHasher.VerifyHashedPassword(user.PasswordHash, model.Password);
if (result != PasswordVerificationResult.Success) {
ModelState.AddModelError("", "The password is not valid.");
} else {
await SignInAsync(user, model.RememberMe);
return Redirect(returnUrl);
}
}
}
return View(model);
}
VerifyHashedPassword()in step 2 always returns Failed. Both parameters ( PasswordHashand Password) are transmitted correctly.
Any pointers to what I am missing are greatly appreciated.
source
share