我有一个处理ajax登录请求的ApiController。以下是代码中发生的情况:
// I tried with HttpContext.Current.GetOwinContext().Get... and it didn't work either
private ApplicationUserManager userManager => Request.GetOwinContext().Get<ApplicationManager>();
private ApplicationSignInManager signInManager => Request.GetOwinContext().Get<ApplicationSignInManager>();
public async Task<IHttpActionResult> Login(LoginJson request)
{
var user = await userManager.FindByEmailAsync(request.Email);
var result = await signInManager.PasswordSignInAsync(user.UserName, request.Password, true, true);
if (result == SignInStatus.Success)
{
if (!User.Identity.IsAuthenticated)
{
throw new Exception("Why are you not authenticating!!!");
}
}
return Ok();
}
始终抛出该异常(即结果Success
,但IPrincipal
报告用户尚未通过身份验证(。
更奇怪的是,如果我重新加载页面,我会被带到仪表板页面(仪表板是经过身份验证的用户的默认主页(,这意味着以前的请求实际上确实登录了用户。但是,为什么User.Identity.IsAuthenticated
在我的第一个登录请求中返回 false?有什么想法吗?
注意:这只发生在ApiController
,正常的MVC Controller
正确登录用户
身份验证 cookie 仅在控制器向客户端(浏览器(发送回复时设置。User.Identity.IsAuthenticated
正在检查cookie是否已设置。但是您正在尝试检查 cookie 是否在您设置 cookie 的同一请求中设置。
换句话说,只有在调用 PasswordSignInAsync
后,您才能检查用户是否仅在以下请求中进行身份验证。所以删除那个throw new Exception...
你会没事的。