繁体   English   中英

ASP.NET Core(2.1)中的身份:为什么我们需要添加新的Context来自定义IdentityUser?

[英]Identity in ASP.NET Core (2.1): Why do we need to add a new Context to customize IdentityUser?

编辑:我可能应该在我的项目中添加它(它基于ASP.NET Core 2.1-具有MVC的WebApp,带有“个人用户帐户”),我没有“ AppUser”(或从IdentityUser继承的等效类),而ApplicationDbContext继承自IdentityDbContext-而不是IdentityIDbContext(或IdentityDbContext)。

我目前正在学习/从ASP.NET Core开始,并使用“添加新脚手架项目”将自定义用户数据添加到Identity中,并注意到如果我希望脚手架创建我的自定义用户类,则无法使用现有上下文(ApplicationDbContext) 。 启用该字段的唯一方法是添加新的上下文,这还将添加新的连接字符串。 但是新的上下文似乎在本质上与我已经存在的上下文所做的相同。

我还注意到,这两个新类(在我的情况下为AppExtendedContext和AppExtendedUser)放在Areas / Identity / Data下,而我实际上希望它们在Data和Models下。

所以我在想:为什么? ;-)

或者,换句话说,它更可行:将生成的代码重构为仅使用单个ApplicationDbContext是否安全? 我会输什么/自己会遇到什么样的麻烦?

答案可能很简单,例如“出于实用的原因”(例如,因为它使自动代码生成更容易/更安全); 在那种情况下,只要我不打算再次使用脚手架,就可以安全地移动这些东西。 但是话又说回来,升级时(例如升级到ASP.NET Core 2.2或ASP.NET Core 3.0)可能会使生活变得更加困难/混乱。

只需AppExtendedContext您的AppExtendedContextAppExtendedUser类,并使用ApplicationDbContextAppUser并在其中添加自定义项。

它们准备好进行修改(它们分别继承自IdentityDbContext<TUser>IdentityUser<TKey> 。如果您不喜欢AppUser名称,可以随意将它们重命名为您的应用程序更熟悉的名称(例如CustomerCustomerUser )。

确实没有必要从AppUserApplicationDbContext继承,它们是您的Core Identity的最终/具体类。

确保您的上下文继承自IdentityDbContext<> 您必须指定要用于应用程序用户的类型,您可以将其创建为扩展IdentityUser的类(考虑到要开始扩展IdentityUser类的事实)。 寻找类似YourCustomContextType : IdentityDbContext<YourCustomUserType>东西YourCustomContextType : IdentityDbContext<YourCustomUserType>

至于身份服务注册,您还需要使用AddDefaultIdentity<YourCustomUserType>().AddEntityFrameworkStores<YourCustomContextType>()在那里指定您的类。

确保您还查看其他人如何扩展身份功能:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM