为什么我的电子邮件确认令牌无效

时间:2020-04-12 12:50:49

标签: c# asp.net-core

[HttpGet("confirm/{userId}/{token}")]
public async Task<IActionResult> ConfirmEmail(string userId, string token)
{
    User user = _userService.GetById(userId);
    IdentityResult result = await _userManager.
    ConfirmEmailAsync(user, HttpUtility.UrlDecode(token));
    if (result.Succeeded)
    {
        return Ok("Email confirmed successfully!");
    }
    else
    {
        ViewBag.Message = "Error while confirming your email!";
        return SignOut();
    }
}

因此,我的令牌在身份结果结果中无效。为什么会这样,我该如何解决?我认为这与令牌不在数据库中有关。我正在使用asp .net core。

1 个答案:

答案 0 :(得分:0)

您的令牌可能已过期。

您可以创建这样的类来创建自定义令牌提供程序并设置到期时间

>>> s = """
...
... z
...
...
... h
...
...
... """
>>> s_new = re.sub(r'^\n', '', s, flags=re.M)
>>> s_new
'z\nh\n'
>>> print(s_new)
z
h

>>>

然后在像这样的public class CustomEmailConfirmationTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class { public CustomEmailConfirmationTokenProvider(IDataProtectionProvider dataProtectionProvider, IOptions<EmailConfirmationTokenProviderOptions> options) : base(dataProtectionProvider, options) { } } public class EmailConfirmationTokenProviderOptions : DataProtectionTokenProviderOptions { public EmailConfirmationTokenProviderOptions() { Name = "EmailDataProtectorTokenProvider"; TokenLifespan = TimeSpan.FromDays(1); } } 方法之后注册该类

services.AddIdentity

此令牌在一天后过期