3
respostas

Erro ao utilizar filtros globais: ERR_TOO_MANY_REDIRECTS

Boa noite!

Ao utilizar o registro de filtros globais a aplicação para de funcionar devido ao loop de redirecionamentos gerando o seguinte erro: "ERR_TOO_MANY_REDIRECTS".

Notei que na aula o instrutor também indica que a aplicação poderia gerar erro, porém não foi corrigida ou divulgado alguma solução. Gostaria de saber se alguém ou algum instrutor poderia nos dizer como solucionar o problema.

Grato.

3 respostas

Olá, João

É a action de Login que está sendo executada? Você pode utilizar o atributo AllowAnonymous para suprimir o filtro global de autenticação:

[Authorize]
public class AccountController : Controller
{
    public ActionResult Profile()
    {
        return View();
    }

    [AllowAnonymous]
    public ActionResult Login()
    {
        return View();
    }
}

Olá Marcelo, fiz como você pediu para eu fazer:

[Authorize]
    public class LoginController : Controller
    {
        [AllowAnonymous]
        public ActionResult Index()
        {
            return View();
        }
}

Porém, continua com o mesmo erro.

Olá Marcelo, tive de fazer isso no meu filter:

public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            object usuario = filterContext.HttpContext.Session["usuarioLogado"];

            if (usuario == null)
            {
                if (filterContext.Controller is CaelumEstoque.Controllers.LoginController)
                {
                    //do nothing
                }
                else
                {
                    filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary(
                            new { action = "Index", controller = "Login" }
                        )
                    );
                }


            }
        }

O que não é legal. Funciona, mas caso eu precise negar o filtro, precisarei adicionar no if. Tentei usar a solução do OverrideAuthorizationAttribute do outro tópico no qual você respondeu, mas também não funcionou. Caso tenha alguma outra solução, por favor, me indique.

Grato.