.net-core - 如何使用不同的 DbContext 配置多个 UserManager
问题描述
我正在努力使用 Net Core Identity,更具体地说是 UserManager API。我有两个具有相同逻辑结构的数据库,其中一个用于测试和认证目的。我环顾了一会儿,设法以某种方式使隔离访问在同一个应用程序下工作,创造了一个“认证环境”。由于我仍然需要执行与用户和角色相关的管理、身份验证和其他任务,因此我有兴趣保留默认 UserManager 的相同功能,但查看不同的数据库。现在我被困住了:GeneratePasswordResetTokenAsync()
来自 UserManager 的方法失败,这取决于我如何设置StartUp.cs
:
启动.cs
services.Configure<IdentityOptions>(opt =>
{
opt.User.RequireUniqueEmail = true;
opt.Password.RequiredLength = 8;
opt.Lockout.AllowedForNewUsers = false;
opt.SignIn.RequireConfirmedAccount = true;
opt.SignIn.RequireConfirmedEmail = true;
opt.Tokens.PasswordResetTokenProvider = "passwordReset";
opt.Tokens.EmailConfirmationTokenProvider = "emailConfirmation";
});
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<DNDriveContext>()
.AddTokenProvider<TwoFactorTokenProvider<User>>("passwordReset")
.AddTokenProvider<EmailConfirmationTokenProvider<User>>("emailConfirmation");
services.AddIdentityCore<UserHom>()
.AddRoles<IdentityRole>()
.AddClaimsPrincipalFactory<UserClaimsPrincipalFactory<UserHom, IdentityRole>>()
.AddEntityFrameworkStores<DNDriveHomContext>()
.AddTokenProvider<TwoFactorTokenProvider<UserHom>>("passwordReset")
.AddTokenProvider<EmailConfirmationTokenProvider<UserHom>>("emailConfirmation");
通过我对该主题的研究,我遇到了AddIdentityCore<TUser>()
上面的方法,它可以很好地创建一个UserManager<TUser>
我可以通过 DI 在控制器中访问的秒。这些角色也可以正常工作,我可以执行与“生产”环境隔离的令牌验证,但是当我尝试调用GeneratePasswordResetTokenAsync()
时,我收到以下错误:
没有注册名为“passwordReset”的 IUserTwoFactorTokenProvider。
我尝试将IdentityOptions
单独传递给每个 Identity 而不是调用services.Configure<IdentityOptions>
,但这并没有什么不同。我认为这是一个分配问题,因为一次只有一个 UserManagers 工作。通过上面的配置,UserManager<UserHom>
会成功生成reset password token,但是mainUserManager<User>
会抛出上述错误。AddTokenProvider<>
在最后评论这两个AddIdentityCore<UserHom>
修复了主要的 UserManager,但现在认证失败了。
我知道制作自定义 UserManager 的可能性,但正如我一开始所说,我想保留 UserManager 的所有默认功能,我不知道如何开始实现自己的一个。对于正在发生的事情的确切解释是什么,我该如何解决这个问题?
解决方案
推荐阅读
- android - 如何使用视图模型从另一个片段访问函数
- php - 如何使用 ajax .post() 将数据传递给 php
- latex - 乳胶中的 APA6 样式 - 如何在摘要页面上隐藏标题?
- sql - 每分钟插入的记录数
- swift - 如何使用 UIDocumentPickerViewController 获取文件的完整路径?
- node.js - 为什么邮递员给我“未找到 404”错误?
- javascript - 当我点击编辑按钮时出现问题,所有其他元素都听点击,但我只需要我点击的那个
- java - 如何在maven项目中构建里面有罐子的战争
- json - Quarkus 入门(带反应式):PostGres/Docker CRUD 应用程序——缺少 POST、PUT 和 DELETE REST URL
- javascript - 每次我点击 jQuery.append 函数时,HTML 表单都会翻倍