0

私が取り組んでいるForm Authentication in Asp.Net MVCので、私はそれを知りたいです-フォーム認証が行われるときに一度だけ呼び出すglobal.asaxORで利用可能なイベントはありますか?base controller class(セッションに何かを追加したいのは、フォーム認証が行われたときに1回だけです)

OnAuthorization とクラスAuthorizeCoreのイベントで試してみました。AuthorizeAttribute私もファイルのイベントで試しApplication_OnAuthenticateRequestてみました。Application_AuthorizeRequestGlobal.asax

しかし、問題は、これらのイベントはすべてリクエストごとに発生するため、authentication発生したときに1回だけ何かを実行したいということです。

これを行うための最良の方法を教えてください!?

注:認証Cookieは、同じドメインに存在する別のAsp.netMVCアプリケーションによって設定されています。(そして、私はsubmainでこのアプリケーションにアクセスしているので、親アプリケーションの認証Cookieにアクセスできます)。しかし、アプリケーション1で認証が行われるときに、アプリケーション2でセッション変数を設定したいと思います(アプリケーション2のユーザーが認証され、アプリケーション2のセッションで情報を追加したいので)

前もって感謝します!

4

4 に答える 4

2

アプリケーション 1 で認証が発生すると、アプリケーション 2 でセッション変数の設定をトリガーする追加の Cookie を追加します。アプリケーション 2 のAuthorizeCoreオーバーライドでAuthorizeAttribute、Cookie の存在を確認します。存在する場合は、セッション変数を設定して削除します。

FormsAuthenticationTicketセッションに保存する代わりに、のユーザー データ部分に情報を追加することも検討してください。

于 2012-12-12T14:54:53.020 に答える
1

あなたが求めているのはアプリケーション固有のイベントです。これの要件と詳細を単純に定義することはできないため、これを処理する組み込みイベントはありません。したがって、これは自分で作成する必要があります。

Forms Auth を使用しているので、それらが認証されていることは正確にわかっていますが、疎結合のイベント駆動型の方法で、これを他のモジュールまたはコンポーネントに伝達する方法に関心があるのではないかと思います。認証サービスを表すビジネス層でサービス インターフェイスを定義することをお勧めします。次に、認証イベントを通知する (または通知を受ける) 必要があるさまざまなコンポーネントを、ASP.NET を介してプッシュするのではなく、認証サービスと直接対話させることができます。そのイベントで何をする必要があるかについてあなたが提供した情報が明らかではないため、私の答えはかなり曖昧です。

とにかく、ASP.NET を介してこれをプッシュする方法を考えることができます。アプリケーション用に生成され、Global.asax.cs で表されるクラスは、他のクラスと同様です。独自のイベントをそのクラスに追加し、IHttpModule(たとえば) サブスクライブしたい場合HttpApplication contextは、メソッドのパラメーターをInit特定の型にキャストし、通常どおりにイベントをアタッチすることができます。

于 2012-12-12T13:55:18.747 に答える
0

ご存知のように、認証はすべてのリクエストで実行され、特定のユーザーが特定のページを表示できるかどうかを確認します。.SetAuthCookie()ただし、ログイン時に(通常は)ユーザーを認証するために呼び出す関数をどこかに定義する必要があります。アクションを呼び出す必要があるのはこの関数です。

于 2012-12-12T13:41:55.333 に答える
0

私の知る限り、OnAuthorized イベントはありません。おそらく ASP.NET Forms にはあるかもしれませんが、MVC では手作業が少なく、はるかに柔軟です。

AccountControllerデフォルトの ASP.NET MVC インターネット アプリケーション プロジェクトを使用している場合は、\Controllers\ フォルダーで を開き、次のLoginメソッドを見つけます。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
        // Add session data or trigger an event
        return RedirectToLocal(returnUrl);
    }

上記のようなものが見つかるはずです。これは、追加のセッション データや、ユーザーがログインしたときに実行するその他のワンタイム コードを追加する場所です。

ASP.NET MVC インターネット アプリケーションを使用していない場合でも、同じ概念が適用されます。ある時点で、ログイン POST を処理するためのコントローラーが必要になります。ログインに成功すると、コードを実行する場所になります。

于 2012-12-12T14:01:23.410 に答える