0

ユーザー認証用に Windows 認証が設定されたイントラネット アプリケーションを使用していますが、問題はありません。ただし、Active Directory で見つけたユーザーの完全な表示名を使用します。

実際、ドメインからさらに詳細をプロファイルに入力したいのですが、問題は、アプリケーションへの最初の呼び出しでユーザーが認証された後、この AD クエリを 1 回だけ実行したいことです。AD とプロファイルはすべて機能していますが、ログイン後に 1 回だけ呼び出されるようにコードを配置する適切な場所が見つかりません。カスタム AuthorizeAttribute がその方法かもしれないと思います...どんな助けも大歓迎です。ありがとう!!

4

2 に答える 2

1

情報をセッション内、Cookie 内、またはクライアント側のローカル ストレージ内に保存してみてください。

于 2013-01-05T12:30:07.503 に答える
0

さて、私は最終的に解決策を思いつきました - これは有効な答えと見なすことができますか? 基本的に、カスタム AuthorizationFilter を作成し、セッションにフラグを設定して、すべての作業を 1 回だけ実行しました。ただし、一度だけ発生するイベント「User_Authenticated」を見つけたいと思っていました。しかし、これはフォーム認証により適していると思います。

public class ProfileUpdater : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            // if there is a profile already in the session we do not update this
            Controller controller = filterContext.Controller as Controller;
            if (controller != null && controller.Session["ProfileUpdated"] != null)
            {
                return;
            }
            else if (controller == null) 
            {
                return;
            }

            UserPrincipal domainUser = DomainHelper.GetDomainUser(controller.User.Identity.Name);

            if (domainUser != null)
            {
                controller.Profile.SetPropertyValue("DisplayName", domainUser.DisplayName);

                controller.Session["ProfileUpdated"] = true; // just put a marker object into the session to show we alreay updated the Profile
            }

            return;
        }
    }
于 2013-01-05T16:33:21.390 に答える