【发布时间】:2019-11-09 20:49:05
【问题描述】:
我正在建立一个系统,用户登录后,他可以选择代表某个组织行事。用户会看到一个组织列表,他可以选择要“模拟”的组织。
此信息是动态的,可以在登录之间更改,因此它不能保留在数据库中。
我发现我可以尝试向用户添加额外的声明。我已经用它来存储一些信息。我通过实现自己的 UserClaimsPrincipalFactory 来实现这一点,这非常简单,因为该信息保留在用户中并且不会更改。
为了添加我的 organizationId 声明,我尝试了不同的方法,但都没有奏效。
直接在 User.Identity 中添加新声明不会在下一个请求中保留它。
添加新声明并使用 httpContext 登录也会在下一个请求中丢失。
我认为这完全是因为我的 UserClaimsPrincipalFactory。
我发现如何为会话持久保存它的唯一方法是使用 userManager。
await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("organizationId", "myOrganization"));
然而,userManager 将数据保存在数据库中,正如我在开始时所说,这些数据是动态的,并且在登录之间会发生变化,它不能保留在数据库中。
我在这个主题上发现了这个问题:Store data in cookie with asp.net core identity
但不幸的是,解决方案将数据保存在数据库中。
这个问题与我的用例类似,但没有得到回答 How to add claim to user dynamically?
【问题讨论】:
-
@Sultan 我看不出 MSSQL 的调试工具将如何帮助我在我的 cookie 中坚持声明。我的问题完全是关于 .net-core 的。
标签: c# asp.net asp.net-core cookies asp.net-identity