none
FormsAuthentication perdendo autenticação após o Refresh da página RRS feed

  • Pergunta

  • Boa tarde galera,

    Estou fazendo minha primeira aplicação usando o MVC 5. Estou usando o Visual Studio 2012. Para minha tela de login, eu decidi autenticar com FormsAuthentication.SetAuthCookie(string, bool). Entretanto, estou enfrentando uma situação atipica.

    Após o login, ao redirecionar para a View seguinte e pegar o usuário logado para uma consulta(não utilizo ActionFilters nem Roles), o User.Identity.IsAuthenticated e o User.Identity.Name estão preenchidos corretamente. Mas, somente no Google Chrome, quando eu dou um refresh na página, ou chamo alguma action que leve para outra view, ele perde essa autenticação. No IE, Firefox e Page Inspector ele continua autenticado normalmente. 

    Alguém sabe o porquê disso?

    Trecho do web.config que contempla a autenticação:

        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" cookieless="UseCookies" />
        </authentication>

    Action que realiza o Login:

    [HttpPost]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
    string cli = DeliveryScheduler.Business.Login.Instance.Authenticate(model.CNPJ, model.Senha);
    if (!string.IsNullOrWhiteSpace(cli))
    {
    FormsAuthentication.SetAuthCookie(cli, true);
    return RedirectToAction("Index", "Schedule");//return View("Index");
    }
    else return RedirectToAction("Index", "Login", new { forbidden = 1 });
    }

    O método Authenticate é só meu método que consulta no banco se os dados de usuário e senha estão corretos, não é relevante e está funcionando normalmente.

    Já a consulta ocorre no seguinte método:

    public string GetCurrentSupplier(HttpContext context)
    {
    string clifor = null;
    if (context.User.Identity.IsAuthenticated)
    {
    string cli = context.User.Identity.Name;
                    System.Web.HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(cli), null);
                    if (!string.IsNullOrWhiteSpace(cli)) clifor = Crypto.TripleDESdecrypt(cli);
    }
    return clifor;
    }

    Na primeira vez que é chamado, logo assim o Login, ele consegue pegar os dados corretamente. Eu passo o meu Context.Current pra este método.

    Mas nas seguintes, ele já no IsAuthenticated retorna false. A linha "System.Web.HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(cli), null);" eu coloquei pra testar se, setando o Principal na mão resolveria. Entretando, nada feito.

    Alguém tem uma luz? Lembrando que esse comportamento só ocorre no Google Chrome. Nos outros browsers e no Page Inspector a autenticação persiste normalmente.

    Abs,

    Rodrigo Pereira

    sexta-feira, 24 de janeiro de 2014 19:49

Todas as Respostas

  • retira isso deixa ele fazer por si só

    cookieless="UseCookies"  

    da configuração

     <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" />
        </authentication>


    Fulvio Cezar Canducci Dias


    sexta-feira, 24 de janeiro de 2014 21:12