User.Identity.IsAuthenticated 在 SignInAsync 调用后返回 false

本文关键字:返回 false 调用 SignInAsync Identity IsAuthenticated User | 更新日期: 2023-09-27 18:36:39

我有一个弹出表单,我使用 jquery UI 对话框加载我的登录视图。单击"登录"按钮时,我使用 ajax post 调用帐户/登录操作。这是我的代码:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = await UserManager.FindAsync(model.UserName, model.Password);
        if (user != null)
        {
           await SignInAsync(user, model.RememberMe);
           //IsAuthenticated is returns false 
           bool isAuthenticated= User.Identity.IsAuthenticated;
            return PartialView("_LoginPartial");
        }
        else
        {
            ModelState.AddModelError("", "Invalid username or password.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

调用 SignInAsync 方法后,User.Identity.IsAuthenticated 返回 false 为什么会发生这种情况?

将不胜感激所提供的任何帮助。如果您需要任何其他信息来帮助回答这个问题,请告诉我

User.Identity.IsAuthenticated 在 SignInAsync 调用后返回 false

这是因为 asp.net 管道尚未对用户进行身份验证。

User.Identity.IsAuthenticated值基于 HttpContext.Current。应该发生的情况是SignInAsync将添加一个cookie,框架将使用该cookie对未来的请求进行身份验证。

因此,在此控制器操作被命中之后。 在所有控制器操作中User.Identity.IsAuthenticated都是如此。AuthorizeAttribute就是基于此。

要获取用户名,我会查看UserManager.FindAsync返回的用户属性,即

var userName = user.UserName