【问题标题】:A Custom Membership Provider *Without* a Database?自定义会员提供者*没有*数据库?
【发布时间】:2013-05-30 18:59:19
【问题描述】:

我一直在查看有关 MVC 4 中成员资格提供程序的更改的各种 SO 问题、博客文章等。虽然我喜欢其中的许多更改和事物的简化(尤其是不合时宜的)框外部登录支持),我还找不到一件看似简单的事情......

如何使用使用另一个数据源的自定义成员/角色提供者来覆盖成员资格/角色提供者?

我不想替换 WebSecurity 或任何激烈的东西,因为它可以处理我希望它处理的所有事情。 (例如 Cookie 管理。)我不想做任何会破坏对外部登录提供程序的现有支持的事情,因为我的应用程序将它们与本地登录一起使用。我要做的就是在会员系统和它背后的数据库之间插入并自定义数据获取。

它默认创建的表是:

  • 用户资料
  • webpages_Membership
  • webpages_OAuthMembership
  • webpages_Roles
  • webpages_UsersInRoles

虽然这样可行,但我有理由将其抽象为一些自定义对象并打破应用程序和数据库之间的耦合。 (基本上,我有一些充满业务逻辑的自定义域模型应该处理所有这些,并且我希望成员/角色系统使用这些模型而不是数据库。这些模型可能会从数据库中获取它们的持久数据,它们可能不。那应该没关系。)

我找到的大多数自定义参考都声称它很容易做到,我所要做的就是修改 UserProfile 模型,在各种调用中包含我的新自定义字段,并将调用更新为 InitializeDatabaseConnection 以指向将其添加到我的数据库架构中。

但我没有使用数据库。 (或者,更具体地说,就应用程序层而言,没有数据库之类的东西。只有我的领域模型。)所以简单的定制并没有真正改变任何东西。

有没有办法在会员系统和数据库之间插入,以便我可以为现有的会员提供者创建自定义数据提供者?

【问题讨论】:

    标签: c# asp.net-mvc-4 membership-provider simplemembership


    【解决方案1】:

    您应该能够创建一个自定义 SimpleRoleProvider 并将其插入您的应用程序,方法是将 web.config 修改为如下内容:

    <add name="SimpleRoleProvider" type="MyCustomRoleProvider.SimpleRoleProvider, MyCustomRoleProvider"/>
    

    其中 MyCustomRoleProvider 是包含您的 SimpleRoleProvider 实现的程序集的名称。

    然后只需删除 SimpleMembership 的初始化。 This article 描述了如何简化SimpleMembership 的初始化过程。基本上从 AccountController 中删除 InitializeSimpleMembership 属性并将初始化移动到 Global.asax Application_Start 方法。但在您的情况下,如果需要,您可能希望添加自定义 SimpleRoleProvider 所需的任何初始化。

    对于您所描述的实现,您很可能还必须创建一个自定义 SimpleMembershipProvider

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-07
      • 2013-09-26
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多