web-dev-qa-db-ja.com

Authorize属性と同様に、falseを返した場合にログインにリダイレクトするカスタム属性を作成する方法-ASP.NET MVC

カスタム属性についていくつかのことをグーグルで試してみましたが、どうすればよいかわかりません...

ユーザーがログインしたら、ユーザーのいくつかの重要な詳細をセッションCookie(ex UserID)に保存します。そして、私がやりたいことは、

if (Session["UserID"] == null)

その後、[Authorize]属性と同じようにログインにリダイレクトされます。そうすれば、この属性をコントローラーレベルのどこにでも適用できます。

Authorize属性を上書きする必要がありますか?新しいものを作成しますか?ログインにリダイレクトするようにするにはどうすればよいですか?

ASP.NET MVC 4も使用しています

助けてくれてありがとう

12
user1189352

必要に応じて、カスタムAuthorizeAttributeを作成し、AuthorizeCore()およびHandleUnauthorizedRequest()をオーバーライドできます。チェックを行い、必要に応じてリダイレクトする独自のロジックを追加します。

MVCのActionFilterAttributeを使用した簡単な例を示しています(認証/承認を行うのに最適な場所ではありません)。

public class VerifyUserAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var user = filterContext.HttpContext.Session["UserID"];
        if (user == null)
            filterContext.Result = new RedirectResult(string.Format("/User/Login?targetUrl={0}",filterContext.HttpContext.Request.Url.AbsolutePath));
    }
}

ユーザーが適切に検証されたら、Session["UserID"]アクションメソッドで/User/Login変数を設定することを忘れないでください。

21
Arghya C

Authorize インターフェースを実装することで、独自のバージョンの IAuthorizationFilter 属性を作成できます。次に例を示します。

class MyCustomFilter : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Session["UserID"] == null)
        {
            filterContext.Result = new RedirectResult("/");
        }
    }
}

そして使用例:

[MyCustomFilter]
public ActionResult About()
{
    ViewBag.Message = "Your application description page.";

    return View();
}
9
Nasreddine