在 Asp.Net Core MVC 中重置密码之前如何验证用户令牌是否有效?

ume*_*mer 2 asp.net-mvc asp.net-identity asp.net-core

我在我的应用程序中使用 Asp.net core MVC,并实现了重置密码功能,并且工作正常。让我展示一下它是如何实现的。当用户请求重置密码时,应用程序会创建一个令牌,如下所示:

var token = _userManager.GeneratePasswordResetToken(user);
Run Code Online (Sandbox Code Playgroud)

该应用程序向用户发送一封电子邮件,当用户点击链接时,它会出现在用户重置密码的页面上。我正在重置如下:

ChangePasswordAsync(user, token, password);
Run Code Online (Sandbox Code Playgroud)

它运行良好。但我想在更改密码之前验证令牌是否有效。有什么办法可以做到吗?

Tie*_* T. 5

UserManager有一个公共方法 ,VerifyUserTokenAsync这可能就是您所追求的。如果您在此处检查源代码,您将看到它是如何在内部使用的ResetPasswordAsync

VerifyUserTokenAsync(user, Options.Tokens.PasswordResetTokenProvider, ResetPasswordTokenPurpose, token)
Run Code Online (Sandbox Code Playgroud)

因此,它依赖于一个魔术字符串,但您应该能够使用相同的值来获取 true 或 false 值,例如:

if(await _userManager.VerifyUserTokenAsync(user, _userManager.Options.Tokens.PasswordResetTokenProvider, "ResetPassword", token))
{
    await _userManager.ResetPasswordAsync(user, token, password);
}
else
{
    // handle a bad token however you see fit...
}
Run Code Online (Sandbox Code Playgroud)

这未经测试,所以我不能保证它按原样工作。