カスタム属性についていくつかのことをグーグルで試してみましたが、どうすればよいかわかりません...
ユーザーがログインしたら、ユーザーのいくつかの重要な詳細をセッションCookie(ex UserID)に保存します。そして、私がやりたいことは、
if (Session["UserID"] == null)
その後、[Authorize]属性と同じようにログインにリダイレクトされます。そうすれば、この属性をコントローラーレベルのどこにでも適用できます。
Authorize属性を上書きする必要がありますか?新しいものを作成しますか?ログインにリダイレクトするようにするにはどうすればよいですか?
ASP.NET MVC 4も使用しています
助けてくれてありがとう
必要に応じて、カスタム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
変数を設定することを忘れないでください。
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();
}