我有一个 asp.net 网络表单应用程序,它有一个登录屏幕。 当我单击登录按钮时,第一次单击时User.Identity.IsAuthenticated
总是假的。 以下是登录代码:
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");
}
}
您已登录用户,但设置 IsAuthenticated 标志的事件和值在下一个请求之前不会运行。您仍在未经身份验证的请求的上下文中。
authenticationManager.SignIn(..)
的返回值是多少?如果它返回布尔值或任何其他信息,告诉您身份验证是否成功,则可以将其用作if
语句的标志。
而不是做:
if (User.Identity.IsAuthenticated)
检查用户是否经过身份验证,我确实检查了IdentityResult
的以下属性,该属性似乎工作正常:
if (userIdentity.IsAuthenticated)
属性 User.Identity.IsAuthenticated 将根据来自 HttpRequest 的 cookie 在应用程序身份验证事件之一中填充。因此,在您的情况下,此属性将具有"假"值。