【问题标题】:Storing ASP.net membership and openid users in a new user table将 ASP.net 成员资格和 openid 用户存储在新用户表中
【发布时间】:2009-07-06 13:36:19
【问题描述】:

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

我的问题是这个新用户表将包含我希望 asp.net 会员用户也能够填写的新字段(个人资料数据)。

我的计划是当用户想要用户名和密码时,他们注册并将信息插入 asp.net_Membership,然后将他们的 guid、用户名、createDate 复制到新用户表中,这样我就可以在代码中查找数据在用户表中,无论他们是否注册了 OpenId 或 asp.net 成员身份。

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

使用 Membership.GetUser 来代替使用会更好的性能吗(我会调用新的 User 表):

User user = _repository.GetUser(userId);

我的应用程序已经在工作,我需要添加对某些页面的引用以支持 _repository,所以我只是在考虑性能。

我是否计划创建一个新的用户表?我不喜欢重复的想法,但如果将来我想更改用户名,更新新用户表和 asp.net_Membership 表并不麻烦。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    这种方法有很多优点。

    1. 它允许用户使用用户名/密码注册和登录。
    2. 它允许用户在他们的个人资料中注册多个 OpenID。
    3. 映射表独立于成员资格 API 的其余部分,因此您可以在不破坏提供程序的情况下以任何方式更改它。
    4. 映射表可以是简单的两列,在 OpenID 列上有一个索引。

    您可以考虑对用户的 OpenID 进行哈希处理,将其转换为 Guid,然后存储 Guid 而不是完整的 URL。这将使数据库列和索引更小更快。

    【讨论】:

      【解决方案2】:

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

      虽然我很困惑,但内置的配置文件提供程序有什么问题?一旦有了用户名,您“只需”调用 Profile.GetProfileByUsername(username) 即可访问您正在寻找的“自定义”属性。

      如果您因为需要查询/过滤/排序用户而担心使用当前的 asp.net Profile 提供程序。 . .

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多