En mi aplicación asp.net mvc3, tengo un atributo de autorización personalizado como se ve a continuación.HandleUnauthorizedRequest no anula
public class CustomAuthorize : AuthorizeAttribute
{
public IAccountRepository AccountRepository { get; set; }
public CustomAuthorize()
{
this.AccountRepository = new UserModel();
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
base.AuthorizeCore(httpContext);
return AccountRepository.isEnabled(HttpContext.Current.User.Identity.Name);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
}
que tienen la etiqueta [CustomAuthorize]
en mis acciones del controlador, y el método AuthorizeCore
funciona bien - que realiza la lógica que yo quiero que (asegurándose de que la cuenta está habilitada en realidad), y luego regresar como tal.
Sin embargo, el método HandleUnauthorizedRequest
reemplazado, que como yo lo entiendo debería permitirme controlar el comportamiento de una solicitud no autorizada, no se está ejecutando en absoluto. Puse un punto de quiebre allí, puse código allí, acceso a mi aplicación no autorizada, y el código nunca se ejecuta.
¿Qué me estoy perdiendo?
EDIT: Hice algunas investigaciones más y encontré algunas otras personas que tenían este problema, pero desafortunadamente ninguna solución.
Edit2: Código de ejemplo
[CustomAuthorize]
public class UserController: Controller
{
public UserController()
{
//do stuff here
}
}
Datos 3: @Fabio
Esto es lo que estoy tratando de hacer. Tengo una página de inicio de sesión (auth de formularios) que funciona bien: llama a mi inicio de sesión personalizado y luego llama mi anulación de AuthorizeCore. Mi aplicación utiliza una gran cantidad de llamadas ajax, y mi objetivo final es que cada vez que un usuario esté usando la aplicación y el administrador las desactive, al hacer una llamada ajax después de haber sido deshabilitado (aunque aún esté conectado) se cierre la sesión. Sin embargo, para hacer esto, quiero devolver una respuesta personalizada si el usuario está haciendo una llamada ajax, y para eso, tengo que reemplazar HandleUnauthorizedRequest. Pero mi Authorize Core (y, por extensión, HandleUnauthorizedRequest) se ignoran si el usuario está conectado (a pesar de que tengo customauthorize etiquetas en todas las acciones de mi controlador que está llamando el ajax).
En resumen: Quiero autorizar al usuario en cada petición, no sólo la solicitud de inicio de sesión (que parece ser lo que el proveedor de pertenencia está haciendo ahora)
¿Tiene cualquier otro atributo que heredan de AuthorizeAttribute? ¿Tiene el AuthorizeAttribute establecido en el nivel de clase, o en una clase base? –
Tengo un proveedor de membresía personalizado, esta clase se declara en el mismo archivo. No tengo otros atributos que hereden de AuthorizeAttribute hasta donde yo sé. – Mansfield
¿Se ha interrumpido un punto de interrupción en AuthorizeCore, como se esperaba? –