我正在使用Identity 2.0重置用户的密码。以下代码段独立工作:
以下代码使用具有PasswordReset目的的UserTokenProvider生成令牌并验证它。
var token = await _userManager.UserTokenProvider.GenerateAsync("PasswordReset", _userManager, user);
var IsValid = await _userManager.UserTokenProvider.ValidateAsync("PasswordReset", token, _userManager, user);
以下代码使用UserManager的内置函数生成密码重置令牌并重置一个人的密码
var token = await _userManager.GeneratePasswordResetTokenAsync(user.Id);
await _userManager.ResetPasswordAsync(user.Id, token, "newPassword");
以下代码是我作为UserTokenProvider使用的代码:
var provider = new DpapiDataProtectionProvider("AppName");
this.UserTokenProvider = new DataProtectorTokenProvider<User, long>(provider.Create("PasswordReset"));
我想要完成的工作分为三个步骤:
生成令牌(有效)
var token = await _userManager.GeneratePasswordResetTokenAsync(user.Id);
检查它是否有效。如果是,用户将插入新密码(工作)
var IsValid = await _userManager.UserTokenProvider.ValidateAsync("PasswordReset", token, _userManager, user);
重置用户密码(由于目的不同,不起作用)
_userManager.ResetPasswordAsync(user.Id, token, "newPassword");
问题是:显然,ResetPasswordAsync使用内置的密码重置目的(从其源代码中称为“Options.Tokens.ChangeEmailTokenProvider”),我无法访问它。
有人可以解释我如何解决这个问题吗?我想在允许用户更改密码之前验证生成的令牌。
提前致谢。