SignInManager.SignInPasswordAsync 未在 ApiController 中登录用户



我有一个处理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...你会没事的。

相关内容

  • 没有找到相关文章

最新更新