User.Identity.IsAuthenticated在第一次点击时总是假的?

时间:2014-02-25 18:11:25

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

我有一个具有登录屏幕的asp.net webforms应用程序。当我单击登录按钮时,第一次单击时User.Identity.IsAuthenticated始终为false。以下是登录的代码:

protected void SignIn(object sender, EventArgs e)
    {
        var userStore = new UserStore<ApplicationUser>();
        var userManager = new UserManager<ApplicationUser>(userStore);
        var user = userManager.Find(UserName.Text, Password.Text);

        if (user != null && user.PasswordRetryCount < 3)
        {
            Session["UserName"] = user.UserName;

            var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
            var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);

            authenticationManager.SignIn(new AuthenticationProperties {IsPersistent = false}, userIdentity);

            if (User.Identity.IsAuthenticated) //false on first click
                Response.Redirect("Default.aspx");
        }
    }

3 个答案:

答案 0 :(得分:3)

您已登录该用户,但设置IsAuthenticated标志的事件和值在您下次请求之前不会运行。您仍处于未经身份验证的请求的上下文中。

authenticationManager.SignIn(..)的返回值是多少?如果它返回bool或任何其他信息,告诉您是否成功进行了身份验证,则可以将其用作if语句的标志。

答案 1 :(得分:1)

而不是:

if (User.Identity.IsAuthenticated)检查用户是否已经过身份验证,我确实检查了IdentityResult的以下属性,似乎工作正常:

if (userIdentity.IsAuthenticated)

答案 2 :(得分:0)

将在应用程序身份验证事件之一中根据来自HttpRequest的cookie填充属性User.Identity.IsAuthenticated。因此,在您的情况下,此属性将具有“false”值。