在 Identity 3.0 的电子邮件确认期间检查令牌的密码复杂性和有效性

Checking password complexity and validity of a token during email confirmation on Identity 3.0

我有一个网络应用程序,使用 ASP.NET Identity 3.0,我在其中创建用户(而不是用户自行注册)。我发送一封确认电子邮件以验证他们的电子邮件帐户。他们的想法是他们通过 URL 进入,并且由于他们还没有设置密码,他们将设置一个初始密码 并且 一次性验证他们的电子邮件猛扑(我想尽可能优雅地一石二鸟)。

问题是,如果根据复杂性策略,他们输入的密码不是有效密码,我不应该使用 UserManager.ConfirmEmail() 确认电子邮件,因为这会使令牌过期。我知道检查密码是否符合要求的唯一方法是实际尝试使用 UserManager.AddPassword() 设置它,但我不应该尝试更改它 除非 我知道电子邮件确认令牌有效。

如何在不设置密码的情况下检查密码是否合规?或者我如何检查令牌是否有效而不过期?

ASP.NET Identity 3.0 确实提供了一个密码验证器,您可以使用它来检查密码是否有效,然后再执行其他步骤。

Here 是您可以找到实际代码的地方。

Here 是您可以找到一些单元测试的地方,可以让您了解如何使用密码验证器。

一般用法如下:

var validator = new PasswordValidator<User>();
var result = await validator.ValidateAsync(UserManager, null, passwordToValidate);
if (result.Failed) // Failed Validation
if (result.Succeeded) // Passed Validation

ValidateAsync 的第二个参数是 User 实例,但这可能不适用于您的情况,因此这里是 null

希望对您有所帮助。