无法检索登录后添加的声明

时间:2017-06-30 06:45:38

标签: c# asp.net asp.net-core asp.net-identity claims-based-identity

我需要临时向用户添加某些声明,其价值可能会发生变化,因此我只需在用户成功登录时添加这些声明。但是当我在HttpContext.User中搜索此声明时,它不在那里。我无法弄清楚我做错了什么。这是我的登录控制器。

编辑:使用ASP.NET Core 1.0和ASP.NET Identity。不使用Identity Server。

public async Task<IActionResult> Login(LoginIdentityModel lim)
{
    var user = await _userManager.FindByEmailAsync(lim.username);
    if (user != null)
    {
        Claim c = new Claim("ProductUploadRequest", "Allow");
        await _userManager.AddClaimAsync(user, c);
        var result = await _signInManager.PasswordSignInAsync(user, lim.password, false, lockoutOnFailure: false);
        if (result.Succeeded)
        {
             var usr = HttpContext.User;//claim not found here
        }
}

2 个答案:

答案 0 :(得分:2)

await _signInManager.RefreshSignInAsync(user);应在后续请求中更新HttpContext.User的声明。

答案 1 :(得分:1)

根据this讨论,HttpContext.User未通过SignIn来电更新_userManager.GetClaimsAsync(user); 并且它是按设计进行的:

  

通常,只有在使用Cookie返回下一个请求时,才会使用登录结果修改ClaimsPrincipal。

要立即检索声明,请尝试:

/SC0+(\d+)$