gpt4 book ai didi

c# - 没有注册名为 'Default'的IUserTwoFactorTokenProvider。问题是两(2)个ASP.NET Core Identity注册中的AddDefaultTokenProviders()

转载 作者:行者123 更新时间:2023-12-03 16:16:30 29 4
gpt4 key购买 nike

我有(2)Identity systems,每个都有自己的Context:

1: CustomerContext : IdentityDbContext<CustomerUser>
2: ApplicationContext : IdentityDbContext<ApplicationUser>

我已经在ASP.NET Core 3.0 API启动文件中成功注册了它们。一个使用 'AddIdentity',另一个使用 'AddIdentityCore'

我还为他们两个都添加了 'AddDefaultTokenProviders'。尽管它可以生成并运行,但是当我尝试使用 token 提供程序时会出现问题,例如 GenerateEmailConfirmationTokenAsync GeneratePasswordResetTokenAsync

如果我从注册中删除了“AddDefaultTokenProviders”之一,则使用 token 对具有“AddDefaultTokenProviders”的身份起作用,当两者都包含AddDefaultTokenProviders时,均不起作用。我得到了这些异常(为简洁起见,我对其进行了一些修整):
System.NotSupportedException: No IUserTwoFactorTokenProvider named 'Default' is registered.
- at Microsoft.AspNetCore.Identity.UserManager.GenerateUserTokenAsync(GenerateEmailConfirmationTokenAsync)
OR
- at Microsoft.AspNetCore.Identity.UserManager.GenerateUserTokenAsync(GeneratePasswordResetTokenAsync)

这些是Startup.cs中的身份注册:

客户用户
services.AddIdentity<CustomerUser, CustomerRole>(options =>
{
options.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<CustomerContext>()
.AddDefaultTokenProviders(); // <-- CANNOT HAVE (2)

应用程序用户
var builder = services.AddIdentityCore<ApplicationUser>(options =>
{
options.Password.RequiredLength = 6;
});
builder = new IdentityBuilder(builder.UserType, typeof(ApplicationRole), builder.Services);
builder.AddEntityFrameworkStores<ApplicationContext>();
builder.AddDefaultTokenProviders(); // <-- CANNOT HAVE (2)

我碰到一篇文章,提到IdentityOptions是单例的,不能两次调用AddDefaultTokenProviders。但是没有解决方法。

如何为两个身份都包括默认 token 提供者?我需要创建自定义 token 提供程序吗?如果是这样,怎么办?我不需要任何 token 定制,我只需要默认的 token 行为。

谢谢你。

最佳答案

我通过添加第二个身份服务来解决此问题,如下所示:

services.AddIdentityCore<CustomerUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<TenantDataContext>()
.AddTokenProvider<DataProtectorTokenProvider<CustomerUser>>(TokenOptions.DefaultProvider);
区别在于按指示的方式调用 .AddTokenProvider而不是 .AddDefaultTokenProviders()

关于c# - 没有注册名为 'Default'的IUserTwoFactorTokenProvider。问题是两(2)个ASP.NET Core Identity注册中的AddDefaultTokenProviders(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303760/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com