2012-12-21 90 views
0

我有一個自定義的授權屬性,它看起來像這樣到目前爲止: (我會稍後添加更多的邏輯,我只是​​想先看到這個工作)。自定義授權屬性和表單身份驗證

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 

     base.OnAuthorization(filterContext); 
    } 

} 

然後我就按照屬性放置到一個控制器:

[CustomAuthorize(Order = 0)] 
public class MyController : Controller 

現在,

這一切運作良好&花花公子,直到我的窗體身份驗證用完。

<forms loginUrl="~/myController/myMethod" timeout="30" /> // this timout expires. 

超時後,我的自定義授權屬性不再被擊中,相反,它似乎窗體身份驗證模塊將接管。

超時之後,窗體auth模塊只返回由上面webconfig代碼中指定的動作呈現的視圖。

我想攔截超時過期時的onAuthorize操作,所以我可以詢問HttpContext的某些事情,並有條件地重定向用戶。

有沒有人做過類似的事情?

+0

當超時發生時,您如何知道自定義授權屬性不再被點擊?在你的例子中,自定義授權屬性什麼都不做,只是把控制權交給了AuthorizeAttribute,所以這就是你會看到的行爲。無論身份驗證狀態如何,它總是應該打CustomAuthorizeAttribute。您可以在Global.asax中的認證周圍抓取事件,例如FormsAuthentication_OnAuthenticate。 –

回答

1

實際上是默認行爲


如果您有什麼處理的情況下,當用戶沒有通過驗證倍率:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
     //your logic 
     //... 
     //... 

     base.HandleUnauthorizedRequest(filterContext); 
} 

或者你可以從ActionFilterAttribute繼承並檢查用戶是否是在自定義操作過濾器中進行身份驗證這將允許您繞過您遇到的表單身份驗證問題。

有些事情是這樣的:

public class CustomAuthorizeAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) 
       { 
        //code that handles unauthorized ajax request 
       } 
       else 
       { 
        //code that handles http request 
       } 
      } 

      //you custom authorization logic 

     } 
    } 
+0

我將它放在我的屬性上,但它在表單身份驗證超時過期後仍然沒有命中。 - 我編輯我的帖子,以反映我已經嘗試過。 – Jeff

+1

對不起,我第一次沒有正確理解這個問題。 PLZ檢查新的更新 – CoffeeCode

+0

這是我嘗試過的解決方案。但是,如果在超時過期後向服務​​器發送ajax調用,則該屬性仍然不會觸發,並且服務器將返回給我登錄視圖。 參考這篇文章:[http://stackoverflow.com/questions/3339842/how-to-handle-unauthorizedrequest-via-ajax-call-in-asp-net-mvc2](http://stackoverflow.com/questions/3339842/how-to-handle-unauthorizedrequest-via-ajax-call-in-asp-net-mvc2) 並閱讀評論以進一步瞭解正在發生的事情。 – Jeff

0

你可以插入代碼到HttpApplication.AcquireRequestState觀看的認證是否有效了,在這一點上重定向。請參閱MSDN瞭解有關該活動的更多信息。