为了存储使用OpenId登录的用户的用户信息,我计划创建用户表.
我的问题是这个新的用户表将包含我希望asp.net成员资格用户能够填写的新字段(配置文件数据).
我的计划是当用户想要用户名和密码时,他们注册并将信息插入到asp.net_Membership中,然后将他们的guid,username,createDate复制到新的用户表中,以便在代码中我可以只查找用户的数据表,如果他们在OpenId或asp.net会员注册,这无关紧要.
我想覆盖Membership.GetUser,以便它查找我的新用户表,我将添加web.config配置文件属性.
是否更好的性能而不是使用Membership.GetUser(我将调用新的User表):
User user = _repository.GetUser(userId);
我的应用程序已经在工作,我需要添加一些页面的引用来支持_repository,所以我只是考虑性能.
我计划创建一个新的用户表吗?我不喜欢复制的想法但是如果将来我想要更改用户名,那么更新新用户表和asp.net_Membership表并不麻烦.
解决方法
创建一个将providerUserKey映射到用户的OpenID的新表.当用户使用其OpenID注册时,将OpenID添加到providerUserKey映射到此新表.当用户返回您的站点并使用其OpenID登录时,请从映射表中查找其providerUserKey.使用providerUserKey使用providerUserKey登录.
这种方法有许多优点.
>它允许用户注册并使用用户名/密码登录.
>它允许用户在其配置文件中注册多个OpenID.
>映射表独立于其他成员资格API,因此您可以在不破坏提供程序的情况下以任何方式更改它.
>映射表可以像两列一样简单,在OpenID列上有索引.
您可以考虑散列用户的OpenID,将其转换为Guid,并存储Guid而不是完整的URL.这将使数据库列和&索引更小更快.