ASP.NET身份的数据库设计

时间:2014-09-05 06:52:45

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

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

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

我有两种选择,但不确定哪种方式更合适。

  1. 所有个人资料信息(用户名,电子邮件,性别,生日,真实姓名)都包含在默认身份ASPNetUsers表中。
  2. 默认标识ASPNetUsers表所需的注册信息(用户名和电子邮件),而额外的配置文件信息位于另一个链接到默认标识ASPNetUsers表的表中。
  3. 还是有更好的选择吗?希望我们在这次讨论中获得新的东西。

3 个答案:

答案 0 :(得分:0)

我会选择选项2.因为配置文件很可能会改变。如果我需要将身份带到其他服务器,那么很容易将它们带到那里。或者稍后扩展到联合身份(嗯......由于同步问题,这可以两种方式)。

答案 1 :(得分:0)

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

Cookie中提供了对主体的声明,因此无需额外的数据库命中。

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

How to user claims in asp.net identity

答案 2 :(得分:0)

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

以这种方式工作,我们也给出了认证和授权的“单一责任” 一个项目,避免代码重复。

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