在ASP中手动验证密码重置令牌.净的身份



我想在ASP中手动验证密码重置令牌。NET Identity 2.0。我正在尝试创建我自己的UserManager.ResetPasswordAsync(string userId, string token, string newPassword)版本,它需要和IdentityUser而不是userId,像这样:

UserManager.ResetPasswordAsync(IdentityUser user, string token, string newPassword)

不确定我这样做是否正确,但在这里我试图验证在前面的步骤中通过电子邮件发送给用户的代码。我没有修改向用户发送电子邮件并生成代码的代码/令牌。我假设这是正确的方法调用,但purpose参数是不正确的。(我试着通过"ASP"。. NET Identity" but not dice.)

if (await userManager.UserTokenProvider.ValidateAsync(purpose: "?", token: code, manager: userManager, user: user))
{
    return IdentityResult.Success;
}
else
{
    return new IdentityResult("Invalid code.");
}

如果有人能告诉我它是如何开箱工作的细节,或者告诉我微软的UserManager.ResetPasswordAsync(IdentityUser user, string token, string newPassword)源代码,那将是最感激的!

我通过将目的设置为"ResetPassword"来解决这个问题。

下面是最终结果的一个片段,以防有人想做类似的事情。这是一个方法在我的ApplicationUserManager类。但是,请注意,Microsoft实现的一些异常处理缺少或没有本地化,因为它们的代码中使用的某些私有变量、方法和资源是不可访问的。不幸的是,他们没有把这些东西保护起来,这样我就可以拿到了。缺失的ThrowIfDisposed方法调用对我来说特别有趣(也很有趣)。显然,它们在处理实例之后预测方法调用,以便提供更友好的错误消息并避免意外。

public async Task<IdentityResult> ResetPasswordAsync(IdentityUser user,
    string token, string newPassword)
{
    if (user == null)
    {
        throw new ArgumentNullException("user");
    }
    // Make sure the token is valid and the stamp matches.
    if (!await UserTokenProvider.ValidateAsync("ResetPassword", token, 
        this, user))
    {
        return IdentityResult.Failed("Invalid token.");
    }
    // Make sure the new password is valid.
    var result = await PasswordValidator.ValidateAsync(newPassword)
        .ConfigureAwait(false);
    if (!result.Succeeded)
    {
        return result;
    }
    // Update the password hash and invalidate the current security stamp.
    user.PasswordHash = PasswordHasher.HashPassword(newPassword);
    user.SecurityStamp = Guid.NewGuid().ToString();
    // Save the user and return the outcome.
    return await UpdateAsync(user).ConfigureAwait(false);
}

根据位于:

的Codeplex存储库,Microsoft.AspNet.Identity的代码似乎尚未开源。

https://aspnetidentity.codeplex.com/SourceControl/latest Readme.markdown

目前,ASP。. NET标识框架代码不是公开的因此不会在本网站上发表。然而,我们正在计划为了改变这一点,我们将尽快发布代码

然而,我确实发现这可能是基于调试符号的UserManager的源:

UserManager源代码

我还发现了这些帖子,可能会有所帮助:

使用ASP实现自定义密码策略。净身份

UserManager类文档

IUserTokenProvider接口文档

相关内容

  • 没有找到相关文章

最新更新