当我们基于 MembershipProvider、MembershipUser 和 RoleProvider 等创建自定义会员时,我们遇到了很多障碍和绊脚石。
我们有许多有趣的要求,而会员提供者似乎并没有帮助我们实现这些要求:
- 用户可能有多个登录。
- 用户没有直接的用户名(但可能有一个有用户名的登录名)。
- 用户有一个唯一的引用(当前是一个自动递增的主键)。
为了实现这一点,我们有两个表: 与登录具有一对多关系的用户。
这实际上意味着我们有一个用户(在假设的世界中)可以通过其 Active Directory 帐户自动登录(如果可能),也可以通过 OpenID 或用户名/密码组合登录。我们还会有一些可能没有 AD 帐户的用户。
我最初尝试通过创建来重新利用成员资格类: - CustomMembershipProvider - CustomMembershipUser - CustomRolesProvider
但是我与它的所有战斗都让我黑眼圈和瘀伤,它真的,真的想要一个用户名!
我是否以最好的方式解决了这个问题?我应该从头开始而不继承任何东西吗?我应该基于 IProvider 类吗?或者也许是 GenericPrincipal 和 GenericIdentity 类?还是我只是缺少 MembershipProvider 的一些东西?
我想让最终的编程体验与开箱即用的会员资格一样简单,例如
Membership.GetCurrentUser();
并避免不太简单的终端编码器体验......