2015-01-21 92 views
0

我已經添加了一個請求來更改我的應用程序中的密碼。爲了確保用戶被重定向到用戶可以更新密碼的視圖,我創建了一個自定義的ExtendedAuthorize屬性並覆蓋了它的OnAuthorization(AuthorizationContext filterContext)。然後我用這個屬性來裝飾每個控制器。該屬性只是檢查用戶是否必須更改密碼,並最終重定向到相應的視圖,如果是這樣的話。然而,這會導致重定向循環。恐怕是因爲應用程序重定向到UpdatePassword這個動作也是用這個屬性裝飾的,因此它會讓瀏覽器回到OnAuthorization(AuthorizationContext filterContext)的方法ExtendedAuthorize等等,這是無限重複的。OnAuthorization導致重定向循環

我不知道如何排序。我試圖把默認屬性[授權],但它沒有幫助。我也嘗試將其更改爲[AllowAnonymous],但它仍然導致重定向循環。非常感謝任何有關如何防止執行控制器屬性的操作的建議。

也許有可能把兩個不同的屬性,如[CustomAuthorize1,CustomAuthorize2]。

回答

1

解決此問題的一個好方法是檢查您的ExtendedAuthorize屬性,OnAuthorization是否在希望用戶重定向到的頁面上運行。

我猜你ExtendedAuthorize是類似以下內容:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public class ExtendedAuthorizeAttribute : AuthorizeAttribute 
{ 
    private readonly string _redirectActionName; 
    private readonly string _redirectControllerName; 

    SimpleAuthorizeAttribute(string redirectActionName, string redirectControllerName) 
    { 
     _redirectActionName = redirectActionName; 
     _redirectControllerName = redirectControllerName; 
    } 

    public string RedirectActionName 
    { 
     get 
     { 
      return _redirectActionName; 
     } 
    } 

    public string RedirectControllerName 
    { 
     get 
     { 
      return _redirectControllerName; 
     } 
    } 
} 

在這種情況下,你只需要檢查OnAuthorize是否是你想要的用戶重定向到網頁上運行:

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    base.OnAuthorization(filterContext); 

    if(filterContext.ActionDescriptor.ActionName == RedirectActionName && 
     filterContext.ActionDescriptor.ControllerDescriptor.ControllerName == RedirectControllerName) 
    { 
     return; 
    } 

    .... 
} 
+0

嗨。我測試過,'OnAuthorization'確實在重定向的頁面上運行。我不知道如何做條件測試。乾杯! – Celdor 2015-01-26 09:47:43

+0

嗨,很高興我可以幫助:) – 2015-01-26 18:25:39

相關問題