2012-01-11 2 views
2

私たちは現在、非常に裸の骨です。Asp.Net Mvcフォーム認証によりログインURLが2回呼び出されています

私は認証のフォームを設定すると、次のビューを持っている:私のweb.configファイルで

views/home/index.cshtml 
views/logon/index.cshtml 

私は、次のしている:

<authentication mode="Forms"> 
    <forms loginUrl="~/LogOn/Dev" /> 
</authentication> 

これは、ログインのためのアクションがある有効になっている場合二度呼ばれる

私はそれを一度だけ呼び出すだけですか?

任意のアイデア?

+0

あなたはlogonというコントローラを持っていますか?通常、ログオン、登録、パスワード変更などの操作を行うアカウントコントローラのようなものが表示されます。 –

+0

これはイントラネットアプリケーション用です。一般的に、ユーザーのセキュリティは、いくつかのjiggery pockeryを使用してチェーンされています。これは、devdがLDAP検索を使用せずにログインできるようにするためです。 – iwayneo

+0

アクションで使用されるコードの基本的な概要を表示できますか?あなたがアクションで使用している戻り値の型は何でしょうか、おそらく 'return RedirectToAction(または類似していますか?そして、標準のWebフォームまたはAJAX要求を使ってPostを実行していますか? – Tr1stan

答えて

0

それは...その後HttpUnauthorizedResult()が呼び出されるアクションメソッドずに伝えるために少し難しいですが、それは次のようになります場合は...

[AllowAnonymous] 
     public ActionResult External() 
     { 
      var authentication = HttpContext.GetOwinContext().Authentication; 
      if (Request.HttpMethod == "POST") 
      { 
       foreach (var key in Request.Form.AllKeys) 
       { 
        if (key.StartsWith("submit.External.") && !string.IsNullOrEmpty(Request.Form.Get(key))) 
        { 
         var authType = key.Substring("submit.External.".Length); 
         authentication.Challenge(authType); 
         return new HttpUnauthorizedResult(); 
        } 
       } 
      } 
      var identity = authentication.AuthenticateAsync("External").Result.Identity; 
      if (identity != null) 
      { 
       authentication.SignOut("External"); 
       authentication.SignIn(
        new AuthenticationProperties { IsPersistent = true }, 
        new ClaimsIdentity(identity.Claims, "Application", identity.NameClaimType, identity.RoleClaimType)); 
       return Redirect(Request.QueryString["ReturnUrl"]); 
      } 

      return View(); 
     } 

と、この方法はにreturnurlクエリ文字列を検索しますキーと値のペア。存在しない場合は、2回目の実行時にこのペアの値として現在のURLを追加して、メソッドを2回呼び出すことで、再び循環します。キーは大文字と小文字が区別されることを避けるために

、このようなクエリ文字列に有効にreturnurlキーと値のペアを供給する...

<a href="/Account/[email protected]y">Login to Your App</a> 

注意。たとえばReturnURLを使用すると、メソッドは引き続き2回呼び出されます。

関連する問題