我需要临时向用户添加某些声明,其值可能会更改,因此我只需要在用户成功登录时才添加这些声明。但是当我在HttpContext.User
中搜索这个说法时,它不存在。我不知道我做错了什么。这是我的登录控制器。
编辑:使用 ASP.NET 核心1.0和 ASP.NET 身份。不使用身份服务器。
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
}
}
await _signInManager.RefreshSignInAsync(user);
应该在后续请求中更新HttpContext.User
的声明。
根据此讨论,HttpContext.User
不是通过SignIn
调用更新的,而是设计使然:
通常,声明主体仅在与 Cookie 一起返回时,仅使用下一个请求的登录结果进行修改。
作为立即检索声明的解决方法,请尝试:
_userManager.GetClaimsAsync(user);