检查身份电子邮件令牌有效性
Checking Identity Email token validity
我有一个 .net 核心应用程序,我在注册后创建了一个电子邮件令牌,然后通过电子邮件发送它。
这个想法是,用户可以在客户端应用程序中使用该电子邮件令牌,我想检查它的有效性(如果它过期,它是否是与给定电子邮件关联的正确令牌)。
我试图在 userManager 中找到任何我可以使用的方法。我找到的是 VerifyUserTokenAsync(ApplicationUser user, string tokenProvider, string purpose, string token)
但我不知道要传递什么参数。
所以,任何人都可以帮助 tokenProvider
和 purpose
我想提一下,电子邮件令牌是使用 GenerateEmailConfirmationTokenAsync
生成的。我可以使用 ConfirmEmailAsync
检查令牌,如果结果不成功,则令牌无效,但如果令牌有效,我不想将 EmailConfirmed 设置为 true。
解决这个问题的一个有用方法是查看ConfirmEmailAsync
的implementation:
public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token)
{
// ...
if (!await VerifyUserTokenAsync(user, Options.Tokens.EmailConfirmationTokenProvider, ConfirmEmailTokenPurpose, token))
{
return IdentityResult.Failed(ErrorDescriber.InvalidToken());
}
// ...
}
正如预期的那样,ConfirmEmailAsync
调用了 VerifyUserTokenAsync
。传入此方法的第二个和第三个参数(tokenProvider
和 purpose
)是使用 UserManager
class 本身的属性提供的。再看源码,很明显 Options
和 ConfirmEmailTokenPurpose
都是 public:
public const string ConfirmEmailTokenPurpose = "EmailConfirmation";
// ...
public IdentityOptions Options { get; set; }
考虑到所有这些,您可以这样调用 VerifyUserTokenAsync
:
await userManager.VerifyUserTokenAsync(
userYouAlreadyHave,
userManager.Options.Tokens.EmailConfirmationTokenProvider,
userManager.ConfirmEmailTokenPurpose,
tokenYouAlreadyHave);
如果此调用returns true
,令牌有效。
我有一个 .net 核心应用程序,我在注册后创建了一个电子邮件令牌,然后通过电子邮件发送它。 这个想法是,用户可以在客户端应用程序中使用该电子邮件令牌,我想检查它的有效性(如果它过期,它是否是与给定电子邮件关联的正确令牌)。
我试图在 userManager 中找到任何我可以使用的方法。我找到的是 VerifyUserTokenAsync(ApplicationUser user, string tokenProvider, string purpose, string token)
但我不知道要传递什么参数。
所以,任何人都可以帮助 tokenProvider
和 purpose
我想提一下,电子邮件令牌是使用 GenerateEmailConfirmationTokenAsync
生成的。我可以使用 ConfirmEmailAsync
检查令牌,如果结果不成功,则令牌无效,但如果令牌有效,我不想将 EmailConfirmed 设置为 true。
解决这个问题的一个有用方法是查看ConfirmEmailAsync
的implementation:
public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token)
{
// ...
if (!await VerifyUserTokenAsync(user, Options.Tokens.EmailConfirmationTokenProvider, ConfirmEmailTokenPurpose, token))
{
return IdentityResult.Failed(ErrorDescriber.InvalidToken());
}
// ...
}
正如预期的那样,ConfirmEmailAsync
调用了 VerifyUserTokenAsync
。传入此方法的第二个和第三个参数(tokenProvider
和 purpose
)是使用 UserManager
class 本身的属性提供的。再看源码,很明显 Options
和 ConfirmEmailTokenPurpose
都是 public:
public const string ConfirmEmailTokenPurpose = "EmailConfirmation";
// ...
public IdentityOptions Options { get; set; }
考虑到所有这些,您可以这样调用 VerifyUserTokenAsync
:
await userManager.VerifyUserTokenAsync(
userYouAlreadyHave,
userManager.Options.Tokens.EmailConfirmationTokenProvider,
userManager.ConfirmEmailTokenPurpose,
tokenYouAlreadyHave);
如果此调用returns true
,令牌有效。