我正在建立一个系统,在用户登录后,他可以选择代表某个组织行事。向用户显示组织列表,然后他选择“模拟”哪个组织。
此信息是动态的,并且可以在登录之间更改,因此它不能保留在数据库中。
我发现我可以尝试向用户添加其他声明。我已经用它来存储一些信息。我是通过实现自己的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?
答案 0 :(得分:0)
我建议您使用自定义响应头值或cookie来为给定会话保留该值。 看看这个问题是否有帮助:How to add a custom header
添加一个cookie,该cookie的过期时间与会话过期时间相同,如下所示:Create a cookie 希望这些帮助。