.net core 如何刷新与当前请求期间登录的用户不同的用户的声明?

.net core 如何刷新与当前请求期间登录的用户不同的用户的声明?,.net-core,identity,claims-based-identity,.net Core,Identity,Claims Based Identity,我使用以下代码更新web应用程序中用户的声明。但是,要更新此用户的声明/cookie,我想强制他再次登录。所以本质上我想在我更新声明后让他的cookie过期。你知道怎么做吗 wait\u signInManager.RefreshSignInAsync(用户)是我尝试的第一件事,但失败了,因为我正在更新另一个用户(当前登录的用户)的声明:) 我发现的所有其他示例或多或少都与RefreshSignInAsync相同,并且不涉及我正在更新另一个用户的声明这一事实 public async Task

我使用以下代码更新web应用程序中用户的声明。但是,要更新此用户的声明/cookie,我想强制他再次登录。所以本质上我想在我更新声明后让他的cookie过期。你知道怎么做吗

wait\u signInManager.RefreshSignInAsync(用户)
是我尝试的第一件事,但失败了,因为我正在更新另一个用户(当前登录的用户)的声明:)

我发现的所有其他示例或多或少都与
RefreshSignInAsync
相同,并且不涉及我正在更新另一个用户的声明这一事实

 public async Task<IActionResult> AddClaimPost(string id)
 {
     var user = _context.ApplicationUser
         .SingleOrDefault(m => m.Id == id);


     foreach(var item in Request.Form)
     {
         if (item.Key.Contains("Claim"))
         {
             if (item.Value.Contains("true"))
             {
                 if (!User.HasClaim(item.Key, item.Key))
                 {
                     var result = await _userManager.AddClaimAsync(user, new Claim(item.Key, item.Key));
                 }
             }
             else
             {
                 var result2 = await _userManager.RemoveClaimAsync(user, new Claim(item.Key, item.Key));
             }
         }
     }

     await _signInManager.RefreshSignInAsync(user);

     return RedirectToAction("Overview");
 }
public异步任务addclaimport(字符串id)
{
var user=\u context.ApplicationUser
.SingleOrDefault(m=>m.Id==Id);
foreach(Request.Form中的var项)
{
如果(项目密钥包含(“索赔”))
{
if(item.Value.Contains(“true”))
{
如果(!User.HasClaim(item.Key,item.Key))
{
var result=await_userManager.addClaimesync(用户,新索赔(item.Key,item.Key));
}
}
其他的
{
var result2=await_userManager.RemoveClaimAsync(用户,新声明(item.Key,item.Key));
}
}
}
等待(u signInManager.RefreshSignInAsync)(用户);;
返回重定向到操作(“概述”);
}

搜索了几天后,我发现我想要的东西是不可能的。如果不将cookie timespan设置为0,则无法强制用户注销

options.Cookies.applicationcokie.ExpireTimeSpan=0

在这种情况下,它将在用户每次发出请求时检查cookie。使用以下代码,您可以强制用户再次登录:


wait\u userManager.UpdateSecurityStampAsync(用户)

有趣的是。也许不是很清楚吧?:)我没有问你同样的问题,而是更新了你的问题,以反映我相信你在问什么(基于我的理解)。你能核实一下我是否没有歪曲你最初的要求吗?是的,你的改变很好。我在提出这个问题时有点匆忙。文件确实有些不清楚。可能会在github上创建一个问题,这在最近是可能的:?啊,我看到你已经提交了一个github问题!不要介意我之前的评论:)当您要更新其登录的用户执行请求时,调用
RefreshSignInAsync
(理想情况下是有条件的)不是一个选项吗?这也是我考虑过的一个选项。但这需要一个额外的标志来跟踪何时调用
RefreshSignInAsync
。我用的解决办法是先开火,然后忘掉它。刷新cookie通常对我来说似乎不是问题……因为每个请求都需要访问数据库以检查安全性标记,所以会有性能代价。对于几十个交互用户来说,这不是一个问题,但是如果你有数百或数千个用户,这就是一个问题。