HandleUnauthorizedRequest não substitui
No meu aplicativo asp.net mvc3, tenho um Atributo de Autorização customizado como mostrado abaixo.
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);
}
}
Eu tenho o[CustomAuthorize]
tag nas minhas ações do controlador eAuthorizeCore
O método funciona bem - ele executa a lógica que eu quero (certificando-se de que a conta está realmente ativada) e retornando como tal.
No entanto, o overriddenHandleUnauthorizedRequest
método, que como eu entendo que deve permitir-me controlar o comportamento de um pedido não autorizado, não está funcionando em tudo. Coloquei um ponto de interrupção lá, coloquei o código lá, acessei meu aplicativo não autorizado e o código nunca é executado.
o que estou perdendo?
EDIT: Eu fiz mais algumas pesquisas e encontrei algumas outras pessoas que tiveram esse problema, mas infelizmente nenhuma solução.
EDIT2: código de exemplo
[CustomAuthorize]
public class UserController: Controller
{
public UserController()
{
//do stuff here
}
}
EDIT 3: @Fabio
Aqui está o que estou tentando fazer. Eu tenho uma página de login (formulários auth) que funciona bem - ele chama meu login personalizado e, em seguida, chama minha substituição AuthorizeCore. Meu aplicativo usa uma grande quantidade de chamadas ajax, e minha meta final é para quando um usuário estiver usando o aplicativo, e o administrador desativá-los, fazendo uma chamada ajax depois de ser desativado (embora ainda esteja logado) deve desconectá-los. No entanto, para fazer isso, eu quero retornar uma resposta personalizada se o usuário estiver fazendo uma chamada de ajax e, para isso, preciso ovverride HandleUnauthorizedRequest. Mas o meu Authorize Core (e, por extensão, o HandleUnauthorizedRequest) está sendo ignorado se o usuário estiver logado (apesar do fato de que eu tenho o direito de autorizar tags em todas as minhas ações do controlador que o ajax está chamando).
Resumindo: desejo autorizar o usuário em todas as solicitações, não apenas na solicitação de login (que parece ser o que o provedor de associação está fazendo agora)