none
Login e Autenticação ASP.NET MVC RRS feed

  • Pergunta

  • Olá Pessoal,

    Quando efetuo o login, o sistema retorna a tela de login. Como se não estivesse identificando que está logado.

    Seguem os métodos.

            [HttpPost]
            public ActionResult Login(FormCollection frmLogin)
            {
                //Recuperando valores do formulário
                string _Username = frmLogin["login"];
                string _Password = frmLogin["password"];
    
                //Se alguma das informações
                if (AutenticarUsuario(_Username.ToUpper(), _Password))
                {
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ViewBag.AlertAuthentication = "Usuário ou senha incorretos!";
                    return View();
                }
            }
    
            public bool AutenticarUsuario(string username, string password)
            {
                try
                {
                    var retornoQueryUser = (from u in db.USUARIOs
                                            where u.LOGIN == username
                                            && u.SENHA == password
                                            select u).FirstOrDefault();
    
                    System.Web.HttpContext.Current.Session["UserId"] = retornoQueryUser.ID_USUARIO;
    
                    System.Web.HttpContext.Current.Session["UserLogin"] = retornoQueryUser.LOGIN;
    
    
                    if (retornoQueryUser != null)
                    {
                        //Criando um objeto cookie
                        HttpCookie UserCookie = new HttpCookie("UserCookieAuthentication");
    
                        //Setando o ID do usuário no cookie
                        UserCookie.Value = retornoQueryUser.ID_USUARIO.ToString();
    
                        //Definindo o prazo de vida do cookie
                        UserCookie.Expires = DateTime.Now.AddDays(1);
    
                        //Adicionando o cookie no contexto da aplicação
                        System.Web.HttpContext.Current.Response.Cookies.Add(UserCookie);
    
                        FormsAuthentication.SetAuthCookie(retornoQueryUser.LOGIN, false);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

    terça-feira, 20 de setembro de 2016 11:50

Respostas

  • Obrigado André, 

    Mas não funcionou, porém encontrei uma linha no Web.config, que quando a comentei, deu certo.

    Só não entendi o porque dessa linha ali, e o que ela faz.

    Segue:

      <system.webServer>
        <modules>
          <remove name="FormsAuthentication" />
        </modules>
      </system.webServer>

    • Marcado como Resposta Yannick Freitas terça-feira, 20 de setembro de 2016 16:08
    terça-feira, 20 de setembro de 2016 14:20

Todas as Respostas

  • Olá,

    Olhando apenas esse código, parece estar ok. Já Debugou para analisar o problema e o porque de ele estar caindo novamente na página de login?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 20 de setembro de 2016 12:43
  • Já sim André, 

    Por isso estou achando muito estranho.  Ele passa para os métodos corretamente.

    No Web.config coloquei o seguente: 

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

    HomeController

        [Authorize]
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                var m = new Construtor();
                m.LoadMenu();
                m.LoadSubMenu();
    
                return View(m);
            }
         }

    Url Quando volta para a página:

    http://localhost:53442/Authentication/Login?ReturnUrl=%2FHome%2FIndex

    Será que eu devo verificar se o usuário está logado ?


    terça-feira, 20 de setembro de 2016 12:48
  • Olha, pelo modelo da URL que é retornada, na verdade parece que o usuário (mesmo que logado) não tem permissão no caminho /Home/Index.

    Tenta deixar aquela parte do seu web.config dessa forma:

    <authentication mode="Forms">
      <forms loginUrl="~/Authentication/Login" timeout="2880" />
    </authentication>
    <authorization>
      <allow users="?"/>
    </authorization>

    Se não funcionar, tenta assim:

    <authentication mode="Forms">
      <forms loginUrl="~/Authentication/Login" timeout="2880" />
    </authentication>
    <authorization>
      <allow users="*"/>
    </authorization>

    Obviamente, se funcionar, peço que teste a segurança e veja se por exemplo, pessoas não logadas conseguem acessar o caminho /Home/Index, etc.

    Valeu!



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Sugerido como Resposta André SeccoMVP terça-feira, 20 de setembro de 2016 14:32
    terça-feira, 20 de setembro de 2016 13:41
  • Obrigado André, 

    Mas não funcionou, porém encontrei uma linha no Web.config, que quando a comentei, deu certo.

    Só não entendi o porque dessa linha ali, e o que ela faz.

    Segue:

      <system.webServer>
        <modules>
          <remove name="FormsAuthentication" />
        </modules>
      </system.webServer>

    • Marcado como Resposta Yannick Freitas terça-feira, 20 de setembro de 2016 16:08
    terça-feira, 20 de setembro de 2016 14:20