BetterMembership.Net v1.0





0/5 (0投票)
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