【问题标题】:OnAuthorization causes Redirect LoopOnAuthorization 导致重定向循环
【发布时间】:2015-01-21 11:11:21
【问题描述】:

我在我的应用程序中添加了更改密码的请求。为了确保用户被重定向到用户可以更新密码的视图,我创建了一个自定义ExtendedAuthorize 属性并覆盖了它的OnAuthorization(AuthorizationContext filterContext)。然后我用这个属性装饰了每个控制器。该属性只是检查用户是否必须更改密码,如果是这种情况,最终会重定向到相应的视图。然而,这会导致重定向循环。恐怕是因为应用程序重定向到UpdatePassword 动作,该动作也被这个属性修饰,因此它使浏览器返回到ExtendedAuthorize 等的OnAuthorization(AuthorizationContext filterContext) 方法,并且无限重复。

我不知道如何排序。我试图把默认属性 [Authorize] 但它没有帮助。我也尝试将其更改为 [AllowAnonymous] 但它仍然导致重定向循环。非常感谢任何有关如何防止操作执行控制器属性的建议。

也许可以放置两个不同的属性,例如 [CustomAuthorize1, CustomAuthorize2]。

【问题讨论】:

    标签: c# asp.net-mvc redirect authorization


    【解决方案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;
        }
    
        ....
    }
    

    【讨论】:

    • 嗨。我测试了OnAuthorization 确实在重定向页面上运行。我不知道如何进行条件测试。干杯!
    • 嗨,很高兴我能帮上忙 :)
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    相关资源
    最近更新 更多