Identity 2.0 UserTokenProvider及其用途

时间:2016-07-08 13:57:52

标签: c# asp.net asp.net-identity

我正在使用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”),我无法访问它。

有人可以解释我如何解决这个问题吗?我想在允许用户更改密码之前验证生成的令牌。

提前致谢。

0 个答案:

没有答案