众所周知,我们可以将基于ASP.NET Identity的配置文件信息扩展到另一个表,或将其包含在默认表(ASPNetUsers
)中。
假设我在注册期间只有两个字段需要填写(用户名和电子邮件),但在完成注册后,用户可能会或可能不会选择填写额外的个人资料信息(如性别,出生日期,真实姓名等)
我有两种选择,但不确定哪种方式更合适。
ASPNetUsers
表中。ASPNetUsers
表所需的注册信息(用户名和电子邮件),而额外的配置文件信息位于另一个链接到默认标识ASPNetUsers
表的表中。还是有更好的选择吗?希望我们在这次讨论中获得新的东西。
答案 0 :(得分:0)
我会选择选项2.因为配置文件很可能会改变。如果我需要将身份带到其他服务器,那么很容易将它们带到那里。或者稍后扩展到联合身份(嗯......由于同步问题,这可以两种方式)。
答案 1 :(得分:0)
您需要在用户上添加自定义属性作为声明。然后在您的视图中从ClaimsPrincipal.Current.Claims访问这些声明。
Cookie中提供了对主体的声明,因此无需额外的数据库命中。
我认为这是最好,最高效的解决方案
答案 2 :(得分:0)
我正在开发一个项目,其中有多个解决方案使用相同的身份验证/授权项目。 身份验证项目是唯一一个使用表AspNetUsers,AspNetRoles,... 另一方面,其他项目有自己的“用户”表,其中包含每个项目所需的额外信息。 如果一个项目需要“BirthDate”而其他项目需要“Sex”,我们就不会将两者都放在一起 身份验证表,为所有项目提供对每个项目无用的额外信息。
以这种方式工作,我们也给出了认证和授权的“单一责任” 一个项目,避免代码重复。
这就是为什么我认为第二种选择更具可扩展性和可维护性。