【问题标题】:How to save claims used in a MVC site using Thinktecture IdentityModel如何使用 Thinktecture IdentityModel 保存 MVC 站点中使用的声明
【发布时间】:2013-10-10 21:19:26
【问题描述】:

我正在使用声明身份验证和 Thinktecture IdentityModel 开发 MVC 网站。

每个用户都有一组 CLAIMS:城市、用户名、电子邮件、角色、生日。

我在数据库中有 3 个表:USERS、USERS_PROFILES 和 USERS_CLAIMS。

USERS 包含用户名和电子邮件列;

USERS_PROFILES 包含 City 和 Birthdate 列。

我将这些值保存在这些表中......我将角色保存在 USERS_CLAIMS 表中。

当我加载用户时,我用这些表中的数据填充 ClaimsIdentity。

问题是:

例如,当我创建用户时,我应该将电子邮件同时保存在 USERS 表和 USERS_CLAIMS 表中吗?

似乎是数据复制,但我不确定……还是应该只保存其中一个?

您对此有何看法?除了角色之外,您还有哪些不适合 USERS 或 USERS_PROFILE 表的声明?

谢谢,

米格尔

【问题讨论】:

    标签: asp.net-mvc claims-based-identity


    【解决方案1】:

    当您使用MVC(模型视图控制器)时,为什么不使用Models

    您的ClaimsIdentity 是一个模型,只需在您的Model 文件夹中创建一个ClaimsIdentityModel.cs,然后像这样使用它:

    public class ClaimsIdentityModel
    {
        public string Username { get; set; }
        public string Email { get; set; }
        public string City { get; set; }
        public Datetime Birthdate{ get; set; }        
    }
    

    然后,当您加载用户时,只需填写 ClaimsIdentityModel。你就完成了。

    【讨论】:

    • 但是放在桌子上……你会怎么存放呢?
    • 商店在您的餐桌上随心所欲。创建一个填充您的 ClaimsIdentityModel 的方法(例如使用 LINQ)。用于填充模型的数据存储在一张表还是一百张表中都没有关系...
    【解决方案2】:

    正如每个表的名称所暗示的,值应仅代表那些值。

    • 用户由用户名标识。电子邮件是用户提出的索赔之一。
    • 角色也是声明,城市也是如此。

    如果您正在创建配置文件表并在配置文件中添加城市,应避免将其添加到索赔表中。但是您需要通过查询 Profile 表来处理 City 作为声明的要求,并根据需要提供值作为声明。

    ClaimsIdentity 是 System.Security.Principal.GenericIdentity 类型,用于在基于声明的方法中识别用户。

    (制作模型将有助于视图)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2015-05-29
      • 2014-03-25
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多