LoginSignup
4
5

More than 5 years have passed since last update.

[ASP.NET] 承認のログインページを動的に切り替える

Posted at

やりたいこと

https://garafu.blogspot.jp/2016/05/manage-aspnet-authorization.html
上記のURLの<属性で制御する方法>では、web.configに設定した

    <authentication mode="Forms">
      <forms loginUrl="/Account/Login" />
    </authentication>

この部分で静的にログインページのURLが決定してしまう。
これを動的に切り替えたい。

やり方

  • System.Web.Mvc.AuthorizeAttributeクラスのHandleUnauthorizedRequestメソッドをoverrideする
  • HandleUnautholizedRequestメソッドの引数AuthorizationContextのインスタンスのResultプロパティにRedirectToResultクラスのインスタンスを格納する。
  • 動的に設定したいコントローラ(controller)とアクション(action)はRouteValueDictionaryクラスのインスタンスを作成する際に指定する

    public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            base.HandleUnauthorizedRequest(filterContext);
            string controllerName; // 動的に変更したいログインページのコントローラ
            string actionName; // 動的に変更したいログインページのアクション
            if (isSmapho(filterContext.HttpContext.Request.UserAgent))
            {
                filterContext.Result = new RedirectToRouteResult
                    (
                        new System.Web.Routing.RouteValueDictionary(
                            new
                            {
                                controller = controllerName,
                                action = actionName,
                                returnUrl = HttpContext.Current.Request.Url
                            }
                        )
                    );
            }
        }
    }

上の例ではスマホからのアクセスかどうかでログイン先を動的に変更するようにしている。(スマホからのアクセスかどうかはisSmaphoメソッドで判定)

HandleUnauthorizedRequestメソッド:(https://msdn.microsoft.com/ja-jp/library/ee427992(v=vs.118).aspx)
AuthorizationContextクラス:(https://msdn.microsoft.com/ja-jp/library/system.web.mvc.authorizationcontext(v=vs.118).aspx)
RedirectToResultクラス:(https://msdn.microsoft.com/ja-jp/library/system.web.mvc.redirecttorouteresult(v=vs.118).aspx)
RouteValueDictionaryクラス:https://msdn.microsoft.com/ja-jp/library/system.web.routing.routevaluedictionary(v=vs.110).aspx

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5