none
Dúvida sobre Authentication no Web.config RRS feed

  • Pergunta

  • Bom dia, criei um projeto MVC 4 padrão. Dentro do projeto criei duas áreas Admin e Cliente, já fiz a autenticação, mas toda vez que testo o acesso (quando não estou logado) para alguma página interna de Admin ou Cliente em vez de ir para a página de login de uma delas, vai para o login padrão criado para o projeto. Como faço para configurar o web.config para ir para página de login de acordo com a url que estou usando?

    minha estrutura:

    Projeto
      Areas
            Admin(tem uma página de login nessa estrutura)
                Controller
                Model
                View
            Cliente(tem uma página de login nessa estrutura)
                Controller
                Model
                View
      Controller
      Model
      View
      web.config

    quinta-feira, 21 de março de 2013 12:17

Respostas

  • Raphael, você está usando FormsAuthentication?

    Se estiver, tenho a solução aqui, é simples:

    var model = UsuarioDAO.Login(usuario.Login,usuario.Senha);
    if(model !=null)
    {
    
    ///CRIA O COOKIE
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    model.IdUsuario, DateTime.Now, DateTime.Now.AddMinutes(30),
    isPersistent, model.Tipo.ToString(),
    FormsAuthentication.FormsCookiePath);
    string encTicket = FormsAuthentication.Encrypt(ticket);
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    
    ////////////////////////////AQUI É O REDIRECTIONAMENTO
    
    if(model.Tipo == 1)
    {
     return RedirectToAction("Index","Admin");
    }
    else if(model.Tipo == 2)
    {
    return RedirectToAction("Index","Cliente");
    }
    
    }
    else
    {
    ViewBag.error = "Usuário e senhas incorretos.";
    }

    Abraços!

    • Sugerido como Resposta Jean Gatto quinta-feira, 20 de agosto de 2015 12:55
    • Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:58
    sábado, 23 de março de 2013 14:40

Todas as Respostas

  • Bom dia Raphael, você pode definir no Web.config a página de login padrão, segue o exemplo:

    <authentication mode="Forms">
    
       <forms name="NOME DO COOKIE" //NOME DO COOKIE
       loginUrl="~/Usuario/Login"  //PÁGINA PADRÃO DO LOGIN
       defaultUrl="~/Home/Index"   //PÁGINA PADRÃO APÓS LOGAR
       cookieless="UseCookies"    //USAR COOKIE
       protection="All" />
    
    </authentication>

    sexta-feira, 22 de março de 2013 13:12
  • Boa tarde, mas posso fazer essa configuração para urls diferentes?

    tipo:

    http://localhost:8585/Admin - se não tiver acesso vai pra url /Admin/Usuarios/Login

    http://localhost:8585/Cliente - se não tiver acesso vai pra url /Cliente/Usuarios/Login

    já procurei em tudo que é lugar, mas só ensinam a fazer pra uma tela.

    fiz de acordo com esse tutorial, mas só dá erro, o web.config não aceita - http://mstechkb.blogspot.com.br/2010/10/areas-in-aspnet-mvc-20.html

    sexta-feira, 22 de março de 2013 20:43
  • Raphael, você precisa definir se vai utilizar o simplemembership, tem um excelente artigo aqui , caso não vá utilizá-lo, vc precisa definir no cadastro do usuario se ele vai ser administrador ou cliente, e conforme for, vai fazer sua pesquisa no banco de dados e conceder o acesso.

    Caso queira algo sem o simplemembership, primeiro vc configura seu web.config conforme o Jean postou, depois vai na pasta App_Start, e altera o arquivo FilterConfig.cs, adicionando a seguinte linha:

    filters.Add(new System.Web.Mvc.AuthorizeAttribute());

    Isso vai fazer com que todas as suas actions sejam restritas a usuários autenticados, ou seja, usuários que tenham feito a autenticação

    FormsAuthentication.SetAuthCookie(usuario, false);

    Caso você queira permitir o acesso para usuários não autenticados, por exemplo, na página de login, vc precisa marcar seu método com a anotação [AllowAnonymous]

    Como você, nesse caso, não vai utilizar o simplemembership, você precisa verificar se o usuário é Administrador ou Cliente, no momento da autenticação, caso ele seja Cliente, você vai fazer o redirecionamento para a action /Cliente, entretanto, você precisará validar sempre, em cada metodo da area do Cliente, se o mesmo é Cliente para conceder o acesso, pois por exemplo, se no index do cliente você verifica se ele é cliente e concede o acesso, pode ter uma action chamada EditarCliente/id, que se você não fizer a verificação, um usuário Administrador que esteja autenticado poderá ter acesso a esse método, claro, caso o administrador realmente não possua a permissão para editar os dados do cliente.

    sábado, 23 de março de 2013 02:26
  • Raphael, você está usando FormsAuthentication?

    Se estiver, tenho a solução aqui, é simples:

    var model = UsuarioDAO.Login(usuario.Login,usuario.Senha);
    if(model !=null)
    {
    
    ///CRIA O COOKIE
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    model.IdUsuario, DateTime.Now, DateTime.Now.AddMinutes(30),
    isPersistent, model.Tipo.ToString(),
    FormsAuthentication.FormsCookiePath);
    string encTicket = FormsAuthentication.Encrypt(ticket);
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
    
    ////////////////////////////AQUI É O REDIRECTIONAMENTO
    
    if(model.Tipo == 1)
    {
     return RedirectToAction("Index","Admin");
    }
    else if(model.Tipo == 2)
    {
    return RedirectToAction("Index","Cliente");
    }
    
    }
    else
    {
    ViewBag.error = "Usuário e senhas incorretos.";
    }

    Abraços!

    • Sugerido como Resposta Jean Gatto quinta-feira, 20 de agosto de 2015 12:55
    • Marcado como Resposta welington jrModerator segunda-feira, 5 de março de 2018 11:58
    sábado, 23 de março de 2013 14:40
  • Obrigado!!!
    terça-feira, 26 de março de 2013 12:24
  • Obrigado!!!
    terça-feira, 26 de março de 2013 12:24