[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。
答案 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
此令牌在一天后过期