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

时间:2015-01-08 11:20:38

标签: c# asp.net asp.net-mvc

我在该表单中有一个弹出窗体我使用jquery UI对话框加载我的登录视图。当单击Login按钮时,我使用ajax post调用Account / Login操作。这是我的代码:

[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为什么会发生这种情况?

感谢您提供的任何帮助。如果您需要任何其他信息来帮助回答此问题,请与我们联系

1 个答案:

答案 0 :(得分:4)

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

User.Identity.IsAuthenticated值基于HttpContext.Current。应该发生的事情是SignInAsync将添加一个框架将用于验证未来请求的cookie。

因此,此控制器操作被击中后。 User.Identity.IsAuthenticated将在所有控制器操作中成立。 AuthorizeAttribute基于此。

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

var userName = user.UserName