2012-03-09 11 views
0

MVC 3 - FormsAuthentication - Can't give access to my Login actionASP.NET MVC3フォーム認証では、ポストは、ログオンアクションすることはできません。この投稿への同様

私はログオンアクションのポストハンドラにユーザー名/パスワードを送信するために私のフォームを取得できませんよ。しかし、私のAccountControllerは、デフォルトのコントローラ、つまり[Authorize] -attributeから継承しています。マイアカウント・コントローラは、次のようになります。

[HttpGet] 
public ActionResult LogOn() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl = null) 
{ 
    ... 
} 

そして、私のweb.configファイルには、とりわけ、含まれています

<location path="Account"> 
      <system.web> 
        <authorization> 
          <allow users="?"/> 
        </authorization> 
      </system.web> 
    </location> 

    <authorization> 
     <deny users="?" /> 
    </authorization> 

    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" defaultUrl="~/Home/Index" /> 
    </authentication> 

ログイン・フォームを送信すると、それはすぐにLogOn-の[HttpGet]バージョンに私をリダイレクトしますアクション。私は決してPOST版に向けられません。私は<authorization>すべてが正常に動作します

<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2f">here</a>.</h2> 
</body></html> 

をコメントアウトした場合:上記の記事で述べたように、私は同じ応答を取得します。しかし、その場合、承認が必要なページへのディープリンクを入力すると、ログオンページにリダイレクトされません。

また、「アカウント」の場所を追加してすべてのユーザーを許可しようとしましたが、これは効果がないようです。

誰かが間違っていることを指摘できますか?フィドラーで

EDIT

私はいつもこのパターンを参照してください。

# Result Protocol Host URL Body Caching Content-Type Process Comments Custom 
1 302 HTTP localhost:36372/ 145 private  text/html; charset=utf-8 iexplore:6400   
2 200 HTTP localhost:36372 /Account/LogOn?ReturnUrl=%2f 4,752 private  text/html; charset=utf-8 iexplore:6400   

なぜ最初のURLは常に/のですか?

EDIT2

生成されたHTMLを確認するために私に起こった、そして私の驚きに、それは次のようになります。

<form action="/" id="LogOnForm" method="post"> 

明らかに、これは正しい行動ではありません。 ASPコードは次のようになります。

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { id = "LogOnForm" })) 

そして、私のルートは次のようになります。

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults 
); 

答えて

0

あなたは/アカウント/ログオンのための場所のタグを追加し、そのへの匿名アクセスを許可する必要があります。

+0

私の記事で述べたように、私はすでにそれを試みましたが、効果はありませんでした。 – Pieter

+0

web.configのformsAuthenticationと一緒に、アカウント/ログオン用のロケーションタグを貼り付けることができますか?ウェブ。上記の設定は「アカウント」の場所のみですが、アカウント/ログオンに一度変更することはできますか? – Sachin

+0

投稿を読んだ後に試しましたが、効果はありません。おそらく、これは問題ではないでしょう。私の編集を参照してください。 – Pieter

1

あなたはMVC

[Authorize] 
    public ViewResult SubmitPost() 
    { 
     return View(); 
    }  

で簡単な認証属性を使用して認証を設定することができますし、ブラウザが

FormsAuthentication.SetAuthCookie("Name", false); 
を閉じたときにのみ、デフォルトで&が の有効期限が切れる暗号化されたクッキーを作成します。これは、認可のためにクッキーを設定する必要があります
関連する問題