2

ユーザー名を変更するためにストアド プロシージャを呼び出しています。これは機能し、ユーザー名が変更されます。

ユーザー名を変更すると、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更新されていないと思います。どうすればそれを実現できますか?

  1. Membership.GetUser() は、認証されたユーザーに対してのみ機能します。それ以外の場合は、null を返します。認証されたリクエストを処理していることを確認するには、ページで「User.Identity.IsAuthenticated」を呼び出します。認証されたリクエストを受け取ったにもかかわらず、Membership.GetUser() が null を返す場合、認証されたユーザーに関連付けられたユーザー名が Membership データソースで見つからないことを意味します。認証されたユーザーのユーザー名を「User.Identity.Name」で確認します。

  2. ユーザー名を受け取る Membership.GetUser() オーバーロードの 1 つを呼び出していて、それが null を返す場合、そのユーザーは Membership データソースに存在しません (またはバグがあります)。これを簡単に確認する 1 つの方法は、同じユーザー名で Membership.CreateUser() を試すことです。ユーザーが重複しているためにエラーが発生しない場合は、そのユーザーが最初から存在していなかったことがわかります。

  3. Membership.GetUser() は、匿名ユーザーに対して機能することはありませんでした。このケースを処理するためのサポートはメンバーシップに組み込まれていません。

4

1 に答える 1