Tru*_*Xax 4 c# asp.net-core asp.net-core-identity
我有一个 .net 核心应用程序,我在注册后制作了一个电子邮件令牌,然后通过电子邮件发送。这个想法是,用户可以在客户端应用程序中使用该电子邮件令牌,我想检查它的有效性(如果它已过期,如果它是与给定电子邮件关联的正确令牌)。
我试图在 userManager 中找到我可以使用的任何方法。我发现的是,VerifyUserTokenAsync(ApplicationUser user, string tokenProvider, string purpose, string token)但我不知道要传递什么参数。
因此,与任何人都可以帮助tokenProvider和purpose
我想提一提的是,电子邮件令牌与生成GenerateEmailConfirmationTokenAsync。我可以使用 来检查令牌ConfirmEmailAsync,如果结果不成功,则令牌无效,但如果令牌有效,我不想将 EmailConfirmed 设置为 true。
解决这个问题的一个有用的方法是看执行的ConfirmEmailAsync:
public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token)
{
// ...
if (!await VerifyUserTokenAsync(user, Options.Tokens.EmailConfirmationTokenProvider, ConfirmEmailTokenPurpose, token))
{
return IdentityResult.Failed(ErrorDescriber.InvalidToken());
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如所料,ConfirmEmailAsync调用VerifyUserTokenAsync. 传递给此方法的第二个和第三个参数 ( tokenProviderand purpose) 是使用UserManager类本身的属性提供的。再次查看源代码,很明显Options和ConfirmEmailTokenPurpose都是公开的:
public const string ConfirmEmailTokenPurpose = "EmailConfirmation";
// ...
public IdentityOptions Options { get; set; }
Run Code Online (Sandbox Code Playgroud)
鉴于所有这些,您可以这样调用VerifyUserTokenAsync:
await userManager.VerifyUserTokenAsync(
userYouAlreadyHave,
userManager.Options.Tokens.EmailConfirmationTokenProvider,
userManager.ConfirmEmailTokenPurpose,
tokenYouAlreadyHave);
Run Code Online (Sandbox Code Playgroud)
如果此调用返回true,则令牌有效。
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |