【问题标题】:Options to remove or modify AspNet Identity删除或修改 AspNet 身份的选项
【发布时间】:2017-03-03 04:28:24
【问题描述】:

我正在使用 Entity Framework 6.1.3 开发 asp.net mvc Web 应用程序。 默认情况下出现的 asp.net 身份对我来说似乎很好,直到我的老板说我们不能对数据库表(用户、用户角色)进行任何更改以适应 aspnet 身份,因为它是一个遗留的 db..as 描述为here :https://www.youtube.com/watch?v=elfqejow5hM

那么,我现在有哪些选择? 我可以完全删除 aspnet 身份吗?如何? 我可以告诉我的 identitycontext 我的表名和列是不同的,并且还可以更改角色管理器中的行为吗?

最重要的是,我的数据库是 mysql db Cheers :)

【问题讨论】:

    标签: mysql asp.net-mvc entity-framework asp.net-identity


    【解决方案1】:

    一个带有个人用户帐户的默认 ASP.NET MVC 项目,带有一个名为 Owin 的中间件,简而言之,它允许为您的应用程序进行大量身份验证配置,例如:

    • Cookie 身份验证
    • Cookie 外部身份验证
    • 双因素登录(例如,手机中的密码 + 短信验证码)
    • Facebook 身份验证
    • OAuth 持有者令牌
    • 等等……

    同时,Identity 是一个为混合各种旧成员而构建的库,因此允许您使用许多 ASP.NET 框架,例如 ASP.NET MVC、WebForms 等。此外,它带有一个内置的实现,它也可以作为 owin 功能的提供者。不过,Identity 都是基于接口的,因此开发人员可以轻松地自定义那里的任何内容,例如插入/拔出功能。这只是一个简短的描述。

    那么,我现在有什么选择?

    1. 使用 Identity 的内置引擎,它会为自己创建新表(包括 AspNetUsers 和 AspNetRoles),您不会将其与现有表混合。在Models文件夹内,有一个IdentityModels.cs文件,有一个ApplicationDbContext类,继承IdentityDbContext。将您现有的 DbSet 带到那里(包括现有用户和角色)。您可以在ApplicationUser(默认情况下与全新项目一起提供,代表IdentityUser)和您现有的用户之间创建关系。因此,您根本不会影响现有表格。
    2. 您可以自己实现Identity的所有接口(不是那么难,但需要一些时间来理解),然后您可以将现有的UserRole分别实现IUserIRole组合起来与身份。
    3. 您可以为UserRole 制作现有模型,只需继承IdentityUserIdentityRole。在此之后,您的 ApplicationDbContext 自然会想在表中插入/更新一些列以适应 IdentityUserIdentityRole 模型(因为您的类现在继承自它们),那么您可能需要对其进行配置以避免更改您的现有表。

    我可以完全删除 aspnet 身份吗?

    当然可以。如果您根本不需要 Owin 的所有功能,为了简单起见,您甚至可能不会使用它。

    怎么做?

    您可以使用表单身份验证而不是个人用户帐户创建一个新项目,并实现自定义RoleProvider 以与您现有的Role 交互。为表单身份验证实现自定义RoleProvider 有点容易。您可以通过查询您的表或使用网络服务让您的提供商检查角色,这取决于您。

    我可以告诉我的 identitycontext 我的表名和列是 不同并改变角色管理器中的行为?

    当然。覆盖 ApplicationDbContext 中的 OnModelCreating 方法(与继承 IdentityDbContext 相同的方法)以更改其在生成/更新数据库时的所有默认行为。您可能不会调用base.OnModelCreating(modelBuilder);,因为这是为您的表创建大量配置的原因。


    我建议您开始阅读有关ASP.NET IdentityUsing MySQL Storage with an MySQL EF Provider 的内容,以便您决定是否保留身份、自定义身份、删除身份等。

    【讨论】:

    • 谢谢!这就是我一直在寻找的……我要“在 ApplicationUser 和您现有的用户之间建立关系”。选项。并且我已经覆盖了 onmodelbuilder 方法来调整...在完全不同的注释上,如果现有数据库中不存在身份表和迁移表,我可以告诉我的代码只添加身份表和迁移表吗?而不是删除数据库并重新创建它
    • @Samra EF 默认不这样做。如果您使用DropCreateDatabaseIfModelChanges 设置初始化程序,EF6 会执行此操作。在你的整个项目中寻找这个词。如果你找到它,你可能想要删除它。
    • 我正在使用 customDBinitialzer "MySqlInitialzer" 并且我有一个现有的数据库,因此 EF 尝试在第一次登录/注册时在该数据库中查找 aspnetusers 表,但我不想删除整个数据库和说 context.Database.Create();所以我现在手动创建了这些表,想知道我是否可以告诉 EF 只创建身份表而不触及其他表
    • 您能回答我的相关问题吗?我真的被困在这里:stackoverflow.com/questions/42617017/…
    • @Samra 好的,我会回答的。关于重新创建数据库,看看here如何避免它。
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多