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

时间:2009-07-06 13:36:20

标签: database-design authentication asp.net-membership openid

为了存储使用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表并不麻烦。

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

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

2 个答案:

答案 0 :(得分:4)

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

这种方法有许多优点。

  1. 它允许用户注册并使用用户名/密码登录。
  2. 它允许用户在其个人资料中注册多个OpenID。
  3. 映射表独立于其他成员资格API,因此您可以在不破坏提供程序的情况下以任何方式更改映射表。
  4. 映射表可以像两列一样简单,在OpenID列上有索引。
  5. 您可以考虑散列用户的OpenID,将其转换为Guid,并存储Guid而不是完整的URL。这将使数据库列和&索引更小更快。

答案 1 :(得分:1)

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

虽然我很困惑,内置的Profile提供程序有什么问题?获得用户名后,您只需“调用”Profile.GetProfileByUsername(用户名),即可访问您要查找的“自定义”属性。

如果您担心使用当前的asp.net配置文件提供程序,则需要查询/过滤/排序用户。 。 。

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

http://www.asp.net/downloads/sandbox/table-profile-provider-samples/

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