为什么电子邮件确认令牌在 10 分钟后过期 [.Net 8]

问题描述 投票:0回答:1

我必须将电子邮件确认令牌过期时间调整为 **30** 分钟。尽管尝试了 StackOverflow 上建议的许多解决方案,但没有一个对我来说是成功的。

这是我在 Program.cs 类中使用的代码。

builder.Services.Configure<DataProtectionTokenProviderOptions>(options =>
{
    options.TokenLifespan = TimeSpan.FromMinutes(30);
});

我使用下面的代码片段来生成确认令牌:

var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

但是,当我尝试使用

验证令牌时
 var varifyAccount = await _userManager.ConfirmEmailAsync(user, token);

如果我在 10 分钟后访问它,它会返回无效令牌。

asp.net-core identity webapi .net-8.0
1个回答
0
投票

usermanager.GenerateEmailConfirmationTokenAsync
方法将使用EmailToken提供程序来生成令牌。并且EmailToken提供程序的默认值应该是您在program.cs中注册身份时使用的令牌提供程序。因此,如果您想修改令牌生存期,您应该修改令牌提供者的令牌生命周期属性。

以下是您可以参考的示例:

builder.Services.AddDefaultIdentity<WebApplication7User>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<WebApplication7Context>()
    .AddDefaultTokenProviders()
.AddTokenProvider<DataProtectorTokenProvider<WebApplication7User>>(TokenOptions.DefaultEmailProvider);
builder.Services.Configure<DataProtectionTokenProviderOptions>(options => options.TokenLifespan = TimeSpan.FromMinutes(3));

我可以成功获取 variifyAccount:

经过设置的时间,token生命周期属性设置成功:

© www.soinside.com 2019 - 2024. All rights reserved.