Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro ValidateAntiForgeryToken

Bom dia pessoal.

Realmente não fiz este curso, mas achei neste fórum uma pergunta parecida com o meu problema e talvez vcs possam me ajudar. O problema é o seguinte: Ao logar no sistema aparece uma outra view, onde ao atualizar com F5 esta view, ocorre o seguinte erro:

Erro de Servidor no Aplicativo '/'. O token antifalsificação fornecido destinava-se a um usuário baseado em declarações diferentes do usuário atual. Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: System.Web.Mvc.HttpAntiForgeryException: O token antifalsificação fornecido destinava-se a um usuário baseado em declarações diferentes do usuário atual.

Erro de Origem:

Exceção sem tratamento foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.

Rastreamento de Pilha:

[HttpAntiForgeryException (0x80004005): O token antifalsificação fornecido destinava-se a um usuário baseado em declarações diferentes do usuário atual.] System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext, IIdentity identity, AntiForgeryToken sessionToken, AntiForgeryToken fieldToken) +620 System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext) +71 System.Web.Helpers.AntiForgery.Validate() +92 System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext) +18 System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +97

Meu código de login em C#:

[HttpGet] public ActionResult Login() {

        return View();

    }

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginViewModel model) {

        if (ModelState.IsValid)
        {
            UsuarioManager manager = HttpContext.GetOwinContext().GetUserManager<UsuarioManager>();
            Usuario usuario = manager.Find(model.LoginName.Trim(), model.Password.Trim());
            if (usuario != null)
            {

                if (usuario.IdStatus == (int)EnumStatusUsuario.INATIVO)
                {
                    ModelState.AddModelError(string.Empty, Utils.ConstantsMessage.MESSAGE_ERROR_USER_INATIVO);
                    return View(model);

                }

                if (usuario.Roles.Count == 0)
                {
                    ModelState.AddModelError(string.Empty, Utils.ConstantsMessage.MESSAGE_ALERT_ROLE_NONE);
                    return View(model);
                }

                ClaimsIdentity identity = manager.CreateIdentity(usuario, DefaultAuthenticationTypes.ApplicationCookie);
                HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { }, identity);

                Dictionary<EnumAreasIgs, List<IdentityRole>> areasPerfis = GetAreasPerfis(usuario, context);

                if (areasPerfis.Keys.Count == 1 && areasPerfis.Values.First().Count == 1)
                {
                    AreaPerfil areaPerfil = new AreaPerfil()
                    {
                        Nome = areasPerfis.Keys.First().ToString(),
                        Perfil = new Perfil()
                        {
                            Id = areasPerfis.Values.First().First().Id,
                            Nome = areasPerfis.Values.First().First().Name
                        }
                    };

                    return RedirectToAction("Index", "Home");
                }
                else
                {


                     return View("Portal", areasPerfis);

                }
            }
            else
            {

                ModelState.AddModelError(string.Empty, Utils.ConstantsMessage.MESSAGE_ERROR_WRONG_USER);
                return View(model);
            }
        }
        else
        {

            return View(model);
        }
    }

Reparem que no post utilizo a tag [ValidateAntiForgeryToken]. Caso eu retire esta tag o erro não ocorre. Não posso retirar esta tag pois faço a inserção do login e da senha. Mas neste mesmo método acesso uma view do Portal, onde ao atualizar(F5) após a autenticação o erro ocorre. Alguém poderia me ajudar?

Obrigada. Flávia

3 respostas

Bom dia Rafael.

Agradeço a ajuda, mas o meu problema é outro. É com a tag [ValidateAntiForgetToken], o problema ocorre ao atualizar a página e ao voltar na seta do browser. De qualquer forma agradeço, e se alguém puder me ajudar. Obrigada

solução!

Olá pessoal.

Agradeço a ajuda , o tópico foi solucionado. Obrigada. Flávia