2009-07-26 10 views
1

私はデフォルトのasp.net MVCの例を拡張しています。それに付属のasp.netメンバーシッププロバイダを使用しています。 。ユーザーが直接URLを知っているとASP.NET MVCのメンバーシップが動作しないようです

問題は、自分のURLの1つに直接ログオンせずにアクセスすると、上部に「ログオン」リンクがある完全なページが表示されることです。

は、私は、誰もが、特定のアクションのいずれかのURLにアクセスし、それらがログインしていない場合は、ログインページにリダイレクト明らかにそれをしたい。

は、私がチェックするすべてのコントローラのすべてのアクションに固有のロジックを配置する必要がありません「ログインしていますか?」\

ここでのベストプラクティスはどれですか?

答えて

8

コントローラーアクションを「[Authorize]」で飾り、Web設定で正しいログインページを設定する必要があります。装飾されたアクションが呼び出されるたびに、ユーザーがログオンしてリダイレクトされているかどうかを確認します正しいログインページでない場合。

編集:ここではそれを設定する方法の例です:web.configファイルで

...追加:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn.aspx" timeout="30"/> 
    </authentication> 

これは、ときに認証されていないユーザーはにリダイレクトされるページを表示します(これはアクションレベルまたはコントローラレベルであることができ、ここでは、アクション・レベルで示されています)あなたのコントローラで[オーソライズ()]

で飾られたコントローラを打つ

public class HistoryController : Controller 
{ 
... 
[Authorize] 
public ActionResult MyActionThatNeedAuthentication() 
{ 
    ... 
} 
... 

} 
+0

を分離されます。また、属性に許可されたユーザーまたはロールを定義することができますコントローラ全体を一度にロックダウンすることができます。 – griegs

+0

あなたはここに私に例を挙げることができます..もしあなたが許可されていなければ、コードはどこに行きますか? – leora

+0

ユーザーが承認されていない場合、〜/ Account/LogOn.aspxにリダイレクトされます。ログインに成功すると、最初にリクエストしたページに戻ります。 – ctford

0

コンマはあなたがそのようにするには、同様に、クラスの最上部に装飾を配置できるリスト

[Authorize(Users = "User1,User2")] 
public ActionResult ActionName() 
{ 
return View(); 
} 

または

[Authorize(Roles = "Role1,Role2")] 
public ActionResult ActionName() 
{ 
return View(); 
} 
関連する問題