asp.net core身份验证中,为了测试用户登陆,直接用代码给赋值
var claims = new[] { new Claim("userId","2") };
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties
{
AllowRefresh = true,
ExpiresUtc = DateTimeOffset.UtcNow.AddHours(24),//24
};
_httpContextAccessor.HttpContext.SignInAsync(
CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
执行完以上代码后紧接着执行
var claims = HttpContext.User.Claims;
发现设置claims 并没有成功,于是断点跟踪到_httpContextAccessor.HttpContext.SignInAsync,确实HttpContext.User.Claims没有值,下载了微软的示例代码,发现必须执行一个完整的页面才可以,也就是说执行完登陆代码之后,在另外的页面获取HttpContext.User.Claims才可以获取到,比如我们设置一个cookies或者session,设置完成之后紧接着代码就可以获取到这个值,但是HttpContext不同,必须完成一个完整的请求之后,才可以获取到新的值,这可能跟HttpContext的机制有关系