动态声明asp.net核心身份无数据库持久性

时间:2019-06-27 19:43:24

标签: c# asp.net asp.net-core cookies asp.net-identity

我正在建立一个系统,在用户登录后,他可以选择代表某个组织行事。向用户显示组织列表,然后他选择“模拟”哪个组织。

此信息是动态的,并且可以在登录之间更改,因此它不能保留在数据库中。

我发现我可以尝试向用户添加其他声明。我已经用它来存储一些信息。我是通过实现自己的UserClaimsPrincipalFactory来实现的,这非常简单,因为该信息保留在用户中并且不会更改。

要添加我的OrganizationId声明,我尝试了不同的方法,但没有奏效。

直接在用户中添加新声明。身份不会在下一个请求中保留。

添加新声明并使用httpContext登录也将在下一个请求中丢失。

我认为这全是因为我的UserClaimsPrincipalFactory。

我发现如何在会话中持久保存它的唯一方法是使用userManager。

await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("organizationId", "myOrganization"));

但是,userManager将数据保存在db中,并且正如我在开始时所说的那样,该数据是动态的,并且在两次登录之间更改,它不能持久保存在db中。

我在以下问题上发现了这个问题:Store data in cookie with asp.net core identity

但是不幸的是,该解决方案将数据保存在数据库中。

该问题与我的用例相似,但未得到回答How to add claim to user dynamically?

1 个答案:

答案 0 :(得分:0)

我建议您使用自定义响应头值或cookie来为给定会话保留该值。 看看这个问题是否有帮助:How to add a custom header

添加一个cookie,该cookie的过期时间与会话过期时间相同,如下所示:Create a cookie 希望这些帮助。