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