我正在调用存储过程来更改用户名。这有效,并且用户名已更改。
更改用户名后,Membership.GetUser()
返回null。我检查了一下User.Identity
,它仍然有旧的用户名并且已经过身份验证。
首先我尝试调用这个函数(用户第一次登录时也会调用)
public void Authorize(string username)
{
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddDays(5), true, string.Empty);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.Expires = authTicket.Expiration;
HttpContext.Current.Response.Cookies.Add(authCookie);
}
然后我尝试Membership.ValidateUser(username,password)
在调用 Authorize 函数之前添加(因为它是一个测试帐户并且我知道密码)但它没有任何区别。
然后我尝试了这个:
FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(txtUserName.Text, false);
我很困惑,在我打电话之后FormsAuthentication.SignOut()
,User.Identity.IsAuthenticated
仍然是真的。在页面重新加载之前不应该更新吗?
我读了这个http://forums.asp.net/t/939408.aspx/1这让我觉得我的问题User.Identity.Name
永远不会得到更新。我该如何做到这一点?
Membership.GetUser() 仅适用于经过身份验证的用户。否则,它将返回 null。要验证您正在处理经过身份验证的请求,请在页面上调用“User.Identity.IsAuthenticated”。如果您有一个经过身份验证的请求,但 Membership.GetUser() 仍然返回 null,那么这意味着在 Membership 数据源中找不到与经过身份验证的用户关联的用户名。使用“User.Identity.Name”验证经过身份验证的用户的用户名。
如果您正在调用使用用户名的 Membership.GetUser() 重载之一并且它返回 null,那么该用户在 Membership 数据源中不存在(或者我们有一个错误)。轻松验证这一点的一种方法是尝试使用相同用户名的 Membership.CreateUser()。如果这不会因为重复用户而引发错误,那么您就知道该用户从一开始就不存在。
Membership.GetUser() 不应该为匿名用户工作。会员资格中没有内置任何支持来处理此案例。