39


たAuthenticateRequestイベント

Q 1はAuthenticateRequestイベントにサブスクライブされているので、このイベントが発生した後にのみ、FormsAuthenticationModuleが呼び出されます。しかし、以下の引用符は少し混乱して私を得た:

  1. 構成された認証メカニズムは、現在の要求を認証したAuthenticateRequestイベント信号。

    • 上記の引用はAuthenticateRequestイベントが発生したときに、(ユーザー別名)要求がすでに認証されていることを示唆していませんか? AuthenticateRequestイベントにサブスクライブ
  2. 要求が結合モジュールまたはイベントハンドラを処理する前に認証されることを保証します。

    • 我々はAuthenticatedRequestに加入した場合に限り、私はこの引用符を理解し、そして私たちのイベントハンドラはFormsAuthenticationModule前に呼び出されますか?したがって、Application_AuthenticateRequest()は、FormsAuthenticationModuleと呼ばれる前に呼び出されますか?私はApplication_AuthenticateRequest()以内に、我々は、ユーザーが特定のロールのメンバーであるかどうかを確認することができますことを示唆している、とされていない場合、我々はユーザーを追加することができますから、勉強してい


Q 2.ブック自動:

上記のコードから判断
protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
      if (User.Identity.IsAuthenticated && Roles.Enabled) 
      { 

       //here we can subscribe user to a role via Roles.AddUserToRole() 
      }  
    } 

Application_AuthenticateRequest()FormsAuthenticationModuleが呼び出された後に呼び出されますが、どこか同じ本のことを意味しているApplication_AuthenticateRequest()FormsAuthenticationModuleに呼び出されます。

Application_AuthenticateRequestは、認証が実行される直前に呼び出されます。 これは、独自の認証ロジックを作成するための出発点です。


私は何をしないのですか?


ありがとう

答えて

50

FormsAuthenticationModuleが最初に処理されることを思えます。このモジュールは通常、ASP.NETパイプライン内のカスタムモジュールよりも早いので、AuthenticateRequestが起動されるとFormsAuthenticationModuleが最初に呼び出され、そのジョブが実行され、モジュールのイベントハンドラが呼び出されます。

本当に深く掘り下げたい場合は、ASP.NETコードを自分でデバッグすることをお勧めします。

http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

EDIT:ここにあなたのVSを設定するにはどのようにポストがある私はGlobal.asaxの中にカスタムモジュールとイベントハンドラを使用してWebプロジェクトを設定して、この動作を確認することができました。 HttpApplication.InitInternalのソースコードを見てみましょう、次のように初期化の順序は次のとおりです。統合されたモジュールの

  • 初期設定:カスタムモジュールフック:FormsAuthenticationModuleは、カスタムモジュールのHttpApplication.AuthenticateRequestイベント
  • 初期までフックグローバル・クラス(Global.asaxの)のHttpApplication.AuthenticateRequestまでのイベント
  • 初期設定:ここでは、特定の名前のパターン(例えば、以下のApplication_AuthenticateRequestグローバルクラスのメソッドのためたAuthenticateRequestイベントへ
  • HttpApplication.InitInternal検索をフックアップ)、イベントにそれらを一致したAuthenticateRequest火災は、イベントハンドラは、それらが初期化され、だからここでの順序で呼び出されたときに、初期化後

をフックします。

  • FormsAuthenticationModule.AuthenticateRequestイベントハンドラ
  • CustomModule.AuthenticateRequestイベントハンドラ
  • Global.AuthenticateRequestイベントハンドラ
  • Global.Application_AuthenticateRequest方法

私が何かを見逃していない限り、イベントハンドラを起動させるメカニズムがないため、FormsAuthenticationModule.AuthenticateRequestの結果に関係なく、次のハンドラが呼び出されます。私はそれが助けて欲しい

+0

Q1を使用することをお勧めしたいですカスタム認証モジュールと呼ばれる? Q2 - しかし、MSDNの引用文(「設定された認証メカニズムが現在の要求を認証したことを示すAuthenticateRequestイベント」)は、FormsAuthenticationModuleがそのジョブを実行した後にのみAuthenticateRequestが起動されることを意味しますか? – SourceC

+1

投稿の詳細な回答。 Q2に関して:「AuthenticateRequestイベントは、設定された認証メカニズムが現在のリクエストを認証したことを示しています。」 - 確かにFormsAuthenticationModuleのイベントハンドラを経由しましたが、その結果はわかりません) – bbmud

+1

thanx。あなたはこれで本当に助けてくれました – SourceC

5

あなたはユーザーオブジェクトにアクセスしたい場合は、私は私がしたAuthenticateRequest火災は、FormsAuthenticationModuleは、その後のApplication_AuthenticateRequest(、最初に呼び出されたときに、正しくあなたを理解)だけにしている場合は、

protected void Application_Start() 
{ 
    PostAuthenticateRequest += Application_PostAuthenticateRequest; 
} 

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
{ 
    if(User.Identity.IsAuthenticated) 
    { 
     //Do stuff here 
    } 
} 
関連する問題