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

时间:2017-02-08 23:43:48

标签: asp.net validation email asp.net-identity asp.net-identity-3

我有一个使用ASP.NET Identity 3.0的Web应用程序,我在其中创建用户(而不是用户注册自己)。我发送确认电子邮件以验证他们的电子邮件帐户。他们的想法是,他们通过URL进入,因为他们还没有设置密码,他们将设置初始密码一举验证他们的电子邮件(我正在努力尽可能优雅地一石二鸟。

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

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

1 个答案:

答案 0 :(得分:2)

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的第二个参数是用户实例,但这可能不适用于您的情况,因此null位于此处。

我希望这可以帮助你。