我有(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/