なか日記

一度きりの人生、楽しく生きよう。

ASP.NET MVCで簡単に認証チェックを追加する

タイトルがイマイチなのは勘弁してもらうとして、Webアプリでログイン済みでないとアクセスできないページってあると思います。

そんな時、

public class HomeController : Controller
{
    public ActionResult About()
    {
        if (認証されてない) {
            return new HttpUnauthorizedResult();
        }
        return View();
    }
}

なんて書いてもいいですが、本来やりたい処理が埋もれちゃいますし、メソッドの中を見ていかないといけないので分かりづらいです。

AuthorizeAttributeを派生させて使う

AuthorizeAttributeを派生させて、そこで認証チェックを行うようにします。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        /* 認証チェックしてOKなら return true; */
        return false;
    }
}

コントローラのメソッドがシンプルに

上で作成したMyAuthorizeAttributeを使用して認証したいメソッドに属性を付けてやります。

public class HomeController : Controller
{
    [MyAuthorize]
    public ActionResult About()
    {
        return View();
    }
}

だいぶすっきりしました。

コントローラ全体にも適用出来る

下のようにコントローラに属性を付けてやるとそのコントローラの全てのメソッドに適用されます。

[MyAuthorize]
public class HomeController : Controller
{
    public ActionResult About()
    {
        return View();
    }
}

まとめ

ちょっとしたサイトなら冒頭に書いたような方法でも困ることはないかもしれませんが、それなりにページが増えてくると徐々に効いてくると思います。 便利なものは積極的に使っていきたいものですね。

おしまい。