Database design 在新用户表中存储ASP.net成员资格和openid用户

Database design 在新用户表中存储ASP.net成员资格和openid用户,database-design,authentication,asp.net-membership,openid,Database Design,Authentication,Asp.net Membership,Openid,为了存储使用OpenId登录的用户的信息,我计划创建一个用户表 我的问题是,这个新用户表将包含我希望asp.net成员资格用户也能够填写的新字段(配置文件数据) 我的计划是,当用户需要用户名和密码时,他们注册并将信息插入asp.net_成员资格,然后将他们的guid、用户名、createDate复制到新的用户表中,这样在代码中我就可以在用户表中查找数据,而不管他们是使用OpenId还是asp.net成员资格注册 我想覆盖Membership.GetUser,以便它查找我的新用户表,并添加web.

为了存储使用OpenId登录的用户的信息,我计划创建一个用户表

我的问题是,这个新用户表将包含我希望asp.net成员资格用户也能够填写的新字段(配置文件数据)

我的计划是,当用户需要用户名和密码时,他们注册并将信息插入asp.net_成员资格,然后将他们的guid、用户名、createDate复制到新的用户表中,这样在代码中我就可以在用户表中查找数据,而不管他们是使用OpenId还是asp.net成员资格注册

我想覆盖Membership.GetUser,以便它查找我的新用户表,并添加web.config配置文件属性

与使用Membership.GetUser(我将在其中调用新的用户表)相比,使用Membership.GetUser是否会提高性能:

我的应用程序已经开始工作了,我需要添加对一些页面的引用以支持存储库,所以我只考虑性能

我创建新用户表的计划确定吗?我不喜欢复制的想法,但是如果将来我想更改用户名,那么更新新的用户表和asp.net_成员表就不麻烦了

我应该覆盖GetUser并在web.config中添加配置文件属性,还是调用我自己的用户对象?


创建一个新的用户表并复制核心数据是最好的方法吗?

用您自己的类覆盖Membership.GetUser会使它更“.Net”,并且可能更容易被其他人获取。不要忘记,您还需要修改存储过程和视图

虽然我很困惑,但内置的配置文件提供程序有什么问题?一旦你有了一个用户名,你就可以“直接”调用Profile.GetProfileByUsername(用户名),并且你可以访问你正在寻找的“自定义”属性

如果由于需要查询/筛选/排序用户而担心使用当前asp.net配置文件提供程序

为什么不使用成员资格提供程序和基于表(每个配置文件属性的各个列)的配置文件提供程序


我为自己开发的一个网站实现了这个功能,其中一个功能是能够“找到”像你这样的人,比如社交网络。它需要一些修改才能开始工作,但它做得很好。

创建一个新表,将providerUserKey映射到用户的OpenID。当用户使用其OpenID进行注册时,将OpenID添加到providerUserKey映射到此新表中。当用户返回您的站点并使用其OpenID登录时,请从映射表中查找其providerUserKey。使用providerUserKey使用其providerUserKey登录

这种方法有许多优点

  • 它允许用户使用用户名/密码注册和登录
  • 它允许用户在其配置文件中注册多个OpenID
  • 映射表独立于成员资格API的其余部分,因此您可以在不破坏提供程序的情况下以任何方式更改它
  • 映射表可以简单到两列,在OpenID列上有一个索引
  • 您可以考虑散列用户的OpenID,将其转换为GUID,并存储GUID,而不是完整URL。这将使数据库列和索引更小更快

    User user = _repository.GetUser(userId);