Я запускаю свое приложение, захожу в систему и меняю свой пароль (я использую идентификационную информацию net .core по умолчанию):
IdentityResult identityResult =
await _userManager.ChangePasswordAsync(
applicationUser,
model.CurrentPassword,
model.NewPassword);
это работает, и в базе данных хранится новый хешированный пароль.
Затем я выхожу из системы и пытаюсь войти с новым паролем. Но
if (await _userManager.CheckPasswordAsync(user, password))
возврат false
. (Вход в систему со старым паролем все еще работает, и я ничего не кеширую)
Когда я перезагружаю свое приложение и пытаюсь войти в систему с новым паролем, оно работает.
Я думаю, это где-то проблема с этим PasswordStore (есть ли кеширование?)? Любые другие предложения, которые я, возможно, забыл или почему это не работает?
редактирование:
метод полного изменения пароля:
[HttpPut]
[Route("api/user/changepassword/{ident}")]
public async Task<bool> ChangePassword(int ident, [FromBody]ChangePasswordModel model)
{
if (!ModelState.IsValid)
return false;
ApplicationUser applicationUser;
if ((applicationUser = await _userManager.FindByIdAsync(ident.ToString())) == null)
return false;
IdentityResult identityResult = await _userManager.ChangePasswordAsync(applicationUser, model.CurrentPassword, model.NewPassword);
return identityResult.Succeeded;
}
часть моего стартапа.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();