使用ASP.NET身份我需要能够在管理级别执行ChangePassword,而无需知道现有用户的密码。不幸的是,UserManager.ChangePasswordAsync需要更改现有密码。
我的解决方法是使用ResetPassword功能。但是,而不是使用电子邮件,只需在幕后做所有事情如下:
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
await _userManager.ResetPasswordAsync(user, code, newPassword);
但密码重置/更新无效,我没有收到任何错误。我假设它可能来自一些事情。
更新
我发现Identity使用SecurityStamp字段生成令牌并检查生成和重置密码时创建的令牌。我将SecurityStamp字段添加到我的自定义User表中,并在创建新用户后看到它已设置。然后我用上面的代码更改用户的密码,并且仍然没有更改,没有错误。我一定是在遗漏别的东西。