我正在建立一个系统,用户登录后,他可以选择代表某个组织采取行动。向用户显示组织列表,然后他选择“模拟”哪个组织。
该信息是动态的,并且可以在登录之间更改,因此它不能保留在数据库中。
我发现我可以尝试向用户添加其他声明。我已经用它来存储一些信息。我是通过实现自己的UserClaimsPrincipalFactory来实现的,这非常简单,因为该信息保留在用户中并且不会更改。
要添加我的organizationId声明,我尝试了不同的方法,但均无效果。
将新声明直接添加到User.Identity不会将其保留在下一个请求中。
在下一个请求中,添加新声明并使用httpContext登录也将丢失。
我认为这都是因为我的UserClaimsPrincipalFactory。
我发现如何在会话中持久保存它的唯一方法是使用userManager。
await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("organizationId", "myOrganization"));
但是,userManager将数据保存在db中,并且正如我在开始时所说的那样,该数据是动态的,并且在两次登录之间更改,它不能持久保存在db中。
我在以下主题上发现了这个问题:使用asp.net核心身份将数据存储在cookie中
但不幸的是,该解决方案将数据保存在数据库中。
这个问题与我的用例相似,但是没有答案。如何动态向用户添加声明?
我建议您使用自定义响应标头值或cookie来为给定会话保留该值。看看这个问题是否有帮助:如何添加自定义标题
添加一个与会话过期时间相同的cookie,如本文中所述:创建一个cookie希望获得帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句