默认的ASP.NET MVC项目,单个用户帐户,附带了一个名为Owin中间件,这在短期让很多认证CONFIGS为您的应用程序,如:
- 饼干认证
- 饼干外部Auth
- 双因素签到(例如,通过手机短信密码+代码在移动)
- Facebook验证
- 的OAuth承载令牌
- 等...
同时,身份是专为混合各种老会员库,从而使您可以与许多ASP.NET框架,如ASP工作.NET MVC,WebForms等。此外,它还内置了一个实现,它也可以作为owin功能的提供者。虽然,身份都是基于接口,所以开发人员可以轻松定制任何内容,如插拔功能。这只是一个简短的描述。
那么,我现在有哪些选择?
- 使用Identity内置的引擎,它会创建新表本身(包括AspNetUsers和AspNetRoles),您不会混合与您现有的表。在
Models
文件夹中,有一个IdentityModels.cs
文件,其中ApplicationDbContext
类继承IdentityDbContext
。为您的模型带上现有的DbSet
(包括现有的用户和角色)。您可以创建ApplicationUser
(默认情况下带有一个全新项目,代表IdentityUser
)与现有用户之间的关系。所以你根本不会影响你现有的表格。
- 你可以自己实现所有Identity的接口(并不难,但需要一些时间才能理解),那么你可以使现有的
User
和Role
分别实现IUser
和IRole
与Identity结合。
- 您可以使现有型号
User
和Role
只继承IdentityUser
和IdentityRole
。在此之后,当然你的ApplicationDbContext
想插入/更新表格中的某些列以适合IdentityUser
和IdentityRole
模型(因为你的类现在从它们继承),那么你可能想要配置它以避免改变你现有的表格。
我可以完全删除aspnet身份吗?
当然可以。如果你根本不需要Owin的所有功能,为了简单起见,你甚至可能不会使用它。
怎么样?
你可以只创建窗体身份验证而不是个人用户帐户一个新的项目,并实现自定义RoleProvider
与您现有的Role
互动。为表单身份验证实现自定义RoleProvider
有点容易。你可以让你的提供者通过查询你的表来检查角色,或者使用一个web服务,这取决于你。
我可以告诉我的identitycontext我的表名和列是 不同,并且还改变了rolemanager中的行为吗?
当然。覆盖ApplicationDbContext
中的OnModelCreating
方法(与继承IdentityDbContext
的同一个方法)以在生成/更新数据库时更改其所有默认行为。您可能不会拨打base.OnModelCreating(modelBuilder);
,因为这会为您的表格创建大量配置。
我建议你开始阅读有关ASP.NET Identity也许Using MySQL Storage with an MySQL EF Provider,这样你就可以决定是否保留身份,对其进行自定义,删除等
谢谢!这就是我一直在寻找的......我将与“建立ApplicationUser和现有用户之间的关系”。选项。我已经覆盖onmodelbuilder方法来调整......在完全不同的说明中,我可以告诉我的代码只添加标识表和迁移表,如果它们不存在于现有数据库中的话?而不是丢弃数据库并重新创建它 – Samra
@Samra EF默认不会这样做。如果您使用“DropCreateDatabaseIfModelChanges”设置初始化程序,EF6会执行此操作。在整个项目中寻找这个词。如果你找到它,你可能想要删除它。 – Alisson
我使用customDBinitialzer“MySqlInitialzer”,我有一个现有的数据库,所以EF尝试在第一次登录/注册时发现该数据库中的aspnetusers表,它没有,我不想删除整个数据库,并说context.Database.Create( );所以我现在手动创建这些表,并想知道如果我可以告诉EF创建唯一的身份表,而不是触及其他表 – Samra