ユーザー名を変更するためにストアド プロシージャを呼び出しています。これは機能し、ユーザー名が変更されます。
ユーザー名を変更すると、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);
}
次に、Authorize 関数を呼び出す前に追加を試みましMembership.ValidateUser(username,password)
たが (これはテスト アカウントであり、パスワードを知っているため)、違いはありませんでした。
それから私はこれを試しました:
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() オーバーロードの 1 つを呼び出していて、それが null を返す場合、そのユーザーは Membership データソースに存在しません (またはバグがあります)。これを簡単に確認する 1 つの方法は、同じユーザー名で Membership.CreateUser() を試すことです。ユーザーが重複しているためにエラーが発生しない場合は、そのユーザーが最初から存在していなかったことがわかります。
Membership.GetUser() は、匿名ユーザーに対して機能することはありませんでした。このケースを処理するためのサポートはメンバーシップに組み込まれていません。