13

私のアプリケーションでは、フォーム認証を使用してユーザーのサインインとサインアウトを行っています。

機能の 1 つは、管理者が他のユーザーのユーザー名を変更できることです。その場合、ユーザー名が変更されたユーザーをサインアウトする必要があります。

そうしないと、以前に Cookie が設定されているため、アプリケーションにアクセスしてエラー メッセージを受け取ります (ユーザー名が存在せず、一部の機能にユーザー名を使用する部分があるため)。

Forms-Authentication を使用してこれらのユーザーを強制的にログアウトするにはどうすればよいですか?

アップデート :

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string controller = filterContext.RouteData.Values["controller"].ToString();
        string action     = filterContext.RouteData.Values["action"].ToString(); ;
        // Below returns the previous username, which does not exist anymore in db.
        string userName = HttpContext.Current.User.Identity.Name;

        UnitOfWork unitOfWork = new UnitOfWork();

        if (!unitOfWork.UserRepository.UserExists(userName))
        {
            FormsAuthentication.SignOut();
            filterContext.HttpContext.Session.Clear();
            filterContext.HttpContext.Session.Abandon();
            // I am not using Roles.


        }
        unitOfWork.Dispose();
        base.OnActionExecuting(filterContext);

    }

顧客のグローバル フィルターで、ユーザーが存在するかどうかを確認し、存在しない場合はサインアウトします。しかし、それは機能していません。機能するということは、認証を通過してアプリケーションにアクセスできることを意味します。

前もって感謝します。

4

2 に答える 2

9

ユーザーに強制的にサインアウトさせるには、次のようにします。

public void UserPasswordChangedHandler()
{
  FormsAuthentication.SignOut();
  Roles.DeleteCookie();
  Session.Clear();
}

行ごとの説明は必要ないと思いますが、自明です。私が間違っている場合はお知らせください。

アップデート

追加の質問に対する簡単な答えは、ユーザーのデータが管理者によって更新されたかどうかをユーザーごとにブール値で追跡し、更新された場合はログイン ページにリダイレクトすることです。

フォーム認証情報を利用した強制ログアウトについては、以下の記事をご覧ください。

更新 2

クッキーの消去

これがお役に立てば幸いです。

于 2012-09-12T00:44:56.823 に答える
2

ユーザーを無効にする必要がある場合は、その詳細をある種の内部静的リストに追加する必要があります。

次に、すべてのページ要求 (おそらく Application_BeginRequest を使用) で、その現在のユーザーがそのリストにあるかどうかを確認し、そうであれば FormsAuthentication.SignOut を呼び出します。

ちょっとしたハックのように思えますが、今考えられる最高のものです。

不在ユーザーのセッション状態を削除することは、まったく別の問題であることに注意してください。

于 2012-09-11T23:35:04.523 に答える