【问题标题】:Database design with ASP.NET Identity使用 ASP.NET Identity 进行数据库设计
【发布时间】:2015-11-04 18:22:13
【问题描述】:

众所周知,我们可能会将基于 ASP.NET Identity 的配置文件信息扩展到另一个表或将其包含到默认表 (ASPNetUsers)。

假设我在注册时只需要填写两个字段(用户名和电子邮件),但在完成注册后,用户可能会或可能不会选择填写额外的个人资料信息(例如性别、出生日期、真实姓名等) .

我有两个选择,但不确定哪个更合适。

  1. 所有个人资料信息(用户名、电子邮件、性别、出生日期、真实姓名)都包含在默认身份ASPNetUsers 表中。
  2. 默认身份ASPNetUsers 表的必需注册信息(用户名和电子邮件),而额外的个人资料信息在另一个表中,该表链接到默认身份ASPNetUsers 表。

或者有没有更好的选择?希望我们能在这次讨论中有所收获。

【问题讨论】:

    标签: database database-design asp.net-identity


    【解决方案1】:

    我会选择选项 2。因为配置文件可能会更改。此外,如果我需要将身份取出到其他服务器,很容易将它们带到那里。或稍后扩展到联合身份(嗯..由于同步问题,这可以双向发挥作用)。

    【讨论】:

    • 好吧,你说得有道理。但是,如果在注册过程中需要一些个人资料信息(名字和姓氏)怎么办?仍然适用于选项 2? (默认表中的名字姓氏,用户名和电子邮件)和其他个人资料信息到另一个表?
    • 需要登录时使用的东西。这最多可以是 3 件事 1) 密码 2) 电子邮件或 3) 用户名​​。这可以保持在一个。其余细节可以去个人资料。
    【解决方案2】:

    您需要将自定义属性添加为对用户的声明。然后在您的视图中从 ClaimsPrincipal.Current.Claims 访问这些声明。

    主体声明在 cookie 中可用,因此不需要额外的数据库命中。

    我认为这是最好和最高效的解决方案

    How to user claims in asp.net identity

    【讨论】:

    • 我不确定这如何回答这个问题。问题在于数据存储。但您的答案是使用数据存储中的数据。
    • 声明将存储在与用户链接的单独表 (AspNetUserClaims) 中。已通过声明实现了保存自定义字段。因此,我如何保存清除的数据也是一个问题。
    【解决方案3】:

    我正在开发一个项目,其中有多个解决方案使用相同的身份验证/授权项目。 身份验证项目是唯一使用表 AspNetUsers、AspNetRoles、... 另一方面,其他项目有自己的“用户”表,其中包含每个项目需要的额外信息。 如果一个项目需要“BirthDate”而另一个项目需要“Sex”,我们不会将两者放在共同的地方 身份验证表,为所有项目提供对每个项目都无用的额外信息。

    以这种方式工作,我们还将身份验证和授权的“单一职责”赋予给 一个项目,避免代码重复。

    这就是为什么我认为第二个选项更具可扩展性和可维护性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 2014-06-22
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2016-12-01
      相关资源
      最近更新 更多