65.9K
CodeProject 正在变化。 阅读更多。
Home

BetterMembership.Net v1.0

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013年10月3日

CPOL

2分钟阅读

viewsIcon

17767

ExtendedMembershipProvider 的更好实现,支持传统的 MembershipProvider API。

引言

在之前一篇题为 SimpleMembershipProvider vs MembershipProvider 的文章中,我描述了使用 SimpleMembershipProvider 作为 MembershipProvider 的局限性。 这是一篇后续文章,它提供了我自己的解决方案来解决这个问题。

BetterMembership.Net 库弥合了 ExtendedMembershipProvider 接口(通过 SimpleMembershipProvider 与 WebSecurity API 一起使用,参见 ASP.NET MVC4 Web Application - Internet 模板)和较旧的 MembershipProvider 接口(参见 ASP.NET Web Forms 模板)之间的差距。

通过使用 BetterMembership.Net 库,您可以利用 ExtendedMembershipProvider 的更新特性,但仍然可以使用预先存在的用户管理工具进行开箱即用的用户管理(包括 ASP.NET Web 站点管理工具)。 当使用 ExtendedMembershipProvider 的原始 SimpleMembershipProvider 实现时,这是不可能的。

特点

  • 支持 SQL Server、SQL Compact 和 SQL Azure
  • 与 EntityFramework 和 code-first 兼容
  • 使用干净的数据库架构
  • 与现有的用户表一起工作
  • 插入到现有的用户管理工具(包括 WSAT)中
  • 支持初始化多个提供程序实例
  • 支持外部身份验证提供程序
  • 提供用户名/电子邮件/密码的可自定义验证

工作原理

该库克服了 WebSecurity 实现的限制,并允许配置和在运行时使用多个提供程序实例。 这对于涉及用户分区的多种身份验证方案的复杂应用程序非常有用,例如 Sitecore。

为了实现这一点,该库使用一些反射来在调用 WebSecurity.InitializeDatabaseConnection 期间交换默认提供程序。 这克服了硬编码到 WebSecurity 实现中的限制,并允许初始化多个提供程序实例(而不仅仅是默认实例)。 当然,这些不能直接与 WebSecurity API 一起使用,但可以有效地与依赖注入一起使用。

现在对 WebSecurity.InitializeDatabaseConnection 的调用实际上发生在提供程序自己的 Initialize 方法中,以使提供程序完全自包含并向后兼容。 可以禁用此功能以用于 code-first,但它确实使用户能够通过 Visual Studio WSAT 工具或其他基于提供程序的接口进行管理。 

在底层,该库扩展了 SimpleMembershipProvider 并实现了许多不支持的方法。 为了方便这一点,它在提供程序上引入了一个新的 userEmailColumn 属性,并使用它将用户定义的电子邮件列映射到旧 API 返回的 MembershipUser 实例的电子邮件属性。 同样,其他属性映射到新的架构,并为任何不受支持的成员返回默认值。

扩展实现

SimpleMembershipProvider 中缺少的以下方法由 BetterMembershipProvider 实现。

  • CreateUser
  • GetUser+
  • GetUserNameByEmail
  • FindUserByUserName
  • FindUserByEmail
  • GetAllUsers
  • FindUsersByName
  • FindUsersByEmail
  • UnlockUser
  • ResetPassword

+ userIsOnline 标志被忽略,但将来可能会实现。

安装

使用 Nuget 安装库。

PM> Install-Package BetterMembership.Net

文档 & 源代码

© . All rights reserved.