OnAuthorization 导致重定向循环
OnAuthorization causes Redirect Loop
我在我的应用程序中添加了更改密码的请求。为了确保用户被重定向到用户可以更新密码的视图,我创建了一个自定义 ExtendedAuthorize
属性并覆盖了它的 OnAuthorization(AuthorizationContext filterContext)
。然后我用这个属性装饰了每个控制器。该属性只是检查用户是否必须更改密码,如果是这种情况,最终会重定向到相应的视图。然而,这会导致重定向循环。恐怕是因为应用程序重定向到 UpdatePassword
操作,该操作也用此属性装饰,因此它使浏览器返回到 ExtendedAuthorize
等的 OnAuthorization(AuthorizationContext filterContext)
方法,这是无限重复。
不知道怎么排序。我试图放置默认属性 [Authorize] 但它没有帮助。我也尝试将其更改为 [AllowAnonymous] 但它仍然导致重定向循环。非常感谢任何关于如何防止操作执行控制器属性的建议。
也许可以放置两个不同的属性,例如 [CustomAuthorize1, CustomAuthorize2]。
解决此问题的一个好方法是检查您的 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;
}
....
}
我在我的应用程序中添加了更改密码的请求。为了确保用户被重定向到用户可以更新密码的视图,我创建了一个自定义 ExtendedAuthorize
属性并覆盖了它的 OnAuthorization(AuthorizationContext filterContext)
。然后我用这个属性装饰了每个控制器。该属性只是检查用户是否必须更改密码,如果是这种情况,最终会重定向到相应的视图。然而,这会导致重定向循环。恐怕是因为应用程序重定向到 UpdatePassword
操作,该操作也用此属性装饰,因此它使浏览器返回到 ExtendedAuthorize
等的 OnAuthorization(AuthorizationContext filterContext)
方法,这是无限重复。
不知道怎么排序。我试图放置默认属性 [Authorize] 但它没有帮助。我也尝试将其更改为 [AllowAnonymous] 但它仍然导致重定向循环。非常感谢任何关于如何防止操作执行控制器属性的建议。
也许可以放置两个不同的属性,例如 [CustomAuthorize1, CustomAuthorize2]。
解决此问题的一个好方法是检查您的 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;
}
....
}