我需要临时向用户添加某些声明,其价值可能会发生变化,因此我只需在用户成功登录时添加这些声明。但是当我在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
}
}
答案 0 :(得分:2)
await _signInManager.RefreshSignInAsync(user);
应在后续请求中更新HttpContext.User
的声明。
答案 1 :(得分:1)
根据this讨论,HttpContext.User
未通过SignIn
来电更新_userManager.GetClaimsAsync(user);
并且它是按设计进行的:
通常,只有在使用Cookie返回下一个请求时,才会使用登录结果修改ClaimsPrincipal。
要立即检索声明,请尝试:
/SC0+(\d+)$