2013-05-05 24 views
7

私はフォーム認証を達成するために匿名コントローラを作成しようとしています。私はIIS7を匿名とフォーム認証を有効にしてを有効にし、私のweb.configをdeny匿名ユーザーに設定しました。ログインコントローラでは、[AllowAnonymous]デコレーションをコントローラ(と自分のアクション)に配置します。フォーム認証と承認MVC 4

私がこの設定のセットで得ることができる唯一のアクションは、ログインアクション(「ログイン」ビューを返す)です。私はログインとして設定したので、このアクションを得ることができます私のweb.configのURL。

 <authentication mode="Forms"> 
     <forms loginUrl="~/Login/Login" timeout="2880" /> 
    </authentication> 

他のすべてのアクションはログインアクションにリダイレクトされます。

は、ここに私のウェブconfig設定です。この設定では、パスワードの復元、登録などの他の重要な操作はできません。

私は間違って何をしていますか?

+0

あなたは世界的に否定することはできません - paswordを復元匿名でアクセスする必要があります。 –

+0

変更する必要があるのは何ですか?匿名アクセスを許可している場合は、すべてのサイトにアクセスでき、MVCは認証されていないユーザーをログインアクションにリダイレクトしません。 – Shahar

+0

私の答えを参照してください.. –

答えて

14

するグローバルフィルタを追加します(MVCのための最良の)web.configファイルにカスタム動作の代わりに、許可の設定でグローバル真偽フィルタを使用し

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new AuthorizeAttribute()); 
    } 
} 

[AllowAnonymous]が動作し、他のすべてのコントローラとアクションに承認が必要です。

+0

例を挙げることはできますか? – Shahar

+0

。例えば、 – hVostt

+0

ありがとう!(私が行ったように)あなたのサイトへの匿名アクセスを許可する必要があります。 – Shahar

0

は...あなたがResetPasswordのリストア/パスワードを設定する必要があります。このは/ etcの登録と同様に

<location path="Login/Login"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

以下のサンプルのようにURLのための匿名認証を許可するようにしようとしなかった

+0

装飾は同じ動作を達成していません? – Shahar

1

2つの方法が考えられます。

最初に、匿名リクエストをAuthorize属性でグローバルに拒否し、AllowAnonymous属性(これはMVC4に新しく追加されたもの)での認証が不要なものをマークすることができます。

グローバルに拒否するのではなく、選択したコントローラ/アクションをAuthorize属性で保護します。

+0

匿名リクエストを拒否し、権限フィルタを追加しない場合は、最初の方法では正確ではありません。ログインアクション以外のアクションを実行することはできません。また、AllowAnonymous属性はMVCによって考慮されません。 – Shahar

+0

私は十分に明確ではありませんでしたが、拒否はもちろんAuthorizeで行うべきです。編集されたバージョンがはっきりしていることを願っていますありがとう。 –

11

あなたはまた、RegisterGlobalFilters方法でAuthorizeフィルタを登録することができます。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new AuthorizeAttribute()); 
} 

そして匿名アクセスを必要とするアクションメソッドにAllowAnonymous属性を使用します。

[Authorize] 
public class AccountController : Controller 
{ 
    [AllowAnonymous] 
    public ActionResult RecoverPassword() 
    { 
    ... 
    } 
} 
+1

ありがとう、hVosttはあなたの前に2分だった – Shahar

+0

問題はありません。あなたがあなたの答えを得てうれしい:) – Kamyar