Desenvolvimento de um login de usuários em CodeIgniter

Como fazer um sistema de login de usuários, acesso por usuário e senha, em uma página web PHP desenvolvida com o framework CodeIgniter.

Por Diego Angelini- Tradução CRV


Publicado em: 31/10/12
Valorize este artigo:
Este é um artigo prático que nos pode ajudar a aprender algumas técnicas de desenvolvimento no framework CodeIgniter, além de nos dar uma guia útil para a criação de um sistema que permita logar os usuários que visitam nossa aplicação web.

O sistema de login é um dos primeiros problemas que queremos resolver em aplicações web. Não é mais do que um módulo que identifica os usuários que visitam uma página web, para implementar um nível de segurança por meio de um nome de usuário e de uma chave. É claro que nas aplicações em CodeIgniter, um de nossos primeiros passos será desenvolver esse acesso autenticado. Por isso, poremos mãos à obra para explicar passo por passo uma possível implementação de um script para facilitar a autenticação de usuários em nossa página web.

Nota: O sistema de login foi tratado anteriormente em CriarWeb.com. Claro que, quando estamos desenvolvendo em CodeIgniter, os modos com que temos que enfrentar os problemas variam um pouco com respeito à programação tradicional em PHP (sem usar nenhum framework). Sendo assim, passamos a vocês um par de referências úteis para poder complementar a presente informação.
Manual de CodeIgniter
Desenvolvimento de um sistema de autenticação em PHP

5 passos simples para criar um sistema de login em CodeIgniter

Começamos listando os passos que realizamos para a construção deste sistema de autenticação de usuários.
  • Passo 1: criar o arquivo php.php e salvá-lo em/application/controllers/
  • Passo 2: criar o arquivo login.php e salvá-lo em /application/views/
  • Passo 3: criar usuários_model.php e salvá-lo em /application/models/
  • Passo 4: criar a tabela mysql com alguns usuários de teste
  • Passo 5: Importante: pre-carregar automaticamente as bibliotecas de CodeIgniter para base de dados e validações de formulários
A continuação, vocês podem ver as listagens de código de cada um dos scripts que utilizamos. Mais tarde neste mesmo artigo, depois das listagens, vocês poderão ler uma descrição de cada um destes passos para a implementação.

Passo 1: Código para o controlador php.php:

<?php

class Php extends CI_Controller {

   function login($idioma=null)
   {
         
      //   $this->config->set_item('language', 'spanish');      //   Setear dinamicamente o idioma que desejamos que execute nossa aplicação
      if(!isset($_POST['maillogin'])){   //   Se não recebemos nenhum valor proveniente do formulario, significa que o usuario recém ingressa.   
         $this->load->view('login');      //   Portanto apresentamos a tela do formulario de ingresso.
      }
      else{                        //   Se o usuario já passou pela tela inicial e pressionou o botão "Inserir"
         $this->form_validation->set_rules('maillogin','e-mail','required|valid_email');      //   Configuramos as validações ajudando-nos com a biblioteca form_validation do Framework Codeigniter
         $this->form_validation->set_rules('passwordlogin','password','required');
         if(($this->form_validation->run()==FALSE)){            //   Verificamos se o usuario superou a validação
            $this->load->view('login');                     //   Em caso negativo, voltamos a apresentar a tela de login
         }
         else{                                       //   Se ambos campos foram corretamente preenchidos pelo usuario,
            $this->load->model('usuarios_model');
            $ExisteUsuarioePassoword=$this->usuarios_model->ValidarUsuario($_POST['maillogin'],$_POST['passwordlogin']);   //   comprovamos que o usuario exista na base de dados e a password inserida seja correta
            if($ExisteUsuarioePassoword){   // A variavel $ExisteUsuarioePassoword recebe valor TRUE se o usuario existe e FALSE em caso negativo. Este valor é determinado pelo modelo.
               echo "Validacao Ok<br><br><a href=''>Volver</a>";   //   Se o usuario inseriu dados de acesso válido, imprimimos uma mensagem de validação de sucesso na tela
            }
            else{   //   Se não conseguiu validar
               $data['error']="E-mail ou password incorreta, por favor volte a tentar";
               $this->load->view('login',$data);   //   O regressamos à tela de login e passamos como parâmetro a mensagem de erro a ser apresentada na tela
            }
         }
      }
   }
}
?>

Paso 2: Código para a visão login.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Demo do script:   Como fazer um login de usuarios em php?</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="description" content="Efetue seus proprios testes on-line. Para executá-lo em seu site você necessita do framework CodeIgniter, fornecido gratis pela empresa de hosting Solo10.com." />
<meta name="keywords" content="php, login, codeigniter, hosting, demo, web hosting, script, usuarios" />

<link rel="stylesheet" href="http://www.blogdephp.com/script/php-login.css" type="text/css" media="screen">
<link rel="stylesheet" href="http://www.blogdephp.com/script/addtoany.min.css" type="text/css" media="screen">

<!--<link rel="stylesheet" href="../../php-login.css" type="text/css" media="screen">-->
<meta name="google-site-verification" content="xWxEFUMgHER4nLx6TAXD9rHFhclvQkEX-RX6qClbszI" />
<script type="text/javascript">

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-20047775-3']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

</script>

<meta property="og:title" content="Como fazer um login de usuarios em php e codeigniter? Ver script e demo !" />
<meta property="og:type" content="blog" />
<meta property="og:url" content="http://www.blogdephp.com/script/php/login/" />
<meta property="og:image" content="http://www.blogdephp.com/images/php.gif" />
<meta property="og:site_name" content="www.blogdephp.com" />
<meta property="fb:admins" content="100001608753773" />

</head>

<body style="margin-top:0px">
<?php echo form_open('php/login/'); ?>
<div class="Info">
   <p class="Titulo"><h1>Demo do script:   <a href="/php-login/">Como fazer um login de usuarios em php e codeigniter?</a></h1></p>
   <p> </p>   
</div>
<div id="LoginUsuarios">
   <div class="fila">
      <div class="LoginUsuariosCabeçalho">E-mail:</div>
      <div class="LoginUsuariosDato"><input type="text" name="maillogin" value="<?= set_value('maillogin'); ?>" size="25" /></div>
      <div class="LoginUsuariosError">
      <?
      if(isset($error)){
         echo "<p>".$error."</p>";
      }
      echo form_error('maillogin');
      ?>
      </div>
   </div>      
   <div class="fila">
      <div class="LoginUsuariosCabeçalho">Contrasenha:</div>
      <div class="LoginUsuariosDado"><input type="password" name="passwordlogin" value="<?= set_value('passwordlogin'); ?>" size="25" /></div>
      <div class="LoginUsuariosError"><?= form_error('passwordlogin');?></div>
   </div>
   <div class="fila">
      <div class="LoginUsuariosCabeçalho"></div>
      <div class="LoginUsuariosDado"></div>
   </div>      
   <div class="fila">
      <div class="LoginUsuariosCabeçalho"><input type="submit" value="Inserir"></div>
      <div class="LoginUsuariosDado"></div>
   </div>      
</div>
</form>
<p> </p>
<div class="Info">
   <p><u><h2>Dados de acesso (demo)</h2></u></p>
   <p> </p>   
   <p>(correspondente a um usuario já inserido na base de dados)</p>
   <p><strong>e-mail</strong>: diego@blogdephp.com</p>
   <p><strong>password</strong>: blogdephp</strong></p>
</div>
<p> </p>   
<!--<p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblogdephp.com%2Fscript%2Fphp%2Flogin&layout=standard&show_faces=true&width=450&action=like&colorscheme=light&height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:50px;" allowTransparency="true"></iframe></p>   -->
<div class="addtoany_share_save_container"><div class="a2a_kit addtoany_list"><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblogdephp.com%2Fphp-login%2F&layout=button_count&show_faces=false&width=75&action=like&colorscheme=light&height=15" frameborder="0" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fblogdephp.com%2Fphp-login%2F&counturl=http%3A%2F%2Fblogdephp.com%2Fphp-login%2F&count=horizontal&text=%C2%BFC%C3%B3mo%20fazer%20un%20login%20de%20usuarios%20en%20Php%20y%20Codeigniter%3F: " frameborder="0" scrolling="no" style="border:none;overflow:hidden;width:80px;height:20px"></iframe><a class="a2a_button_linkedin" href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fblogdephp.com%2Fphp-login%2F&linkname=%C2%BFC%C3%B3mo%20hacer%20un%20login%20de%20usuarios%20en%20Php%20y%20Codeigniter%3F" title="LinkedIn" rel="nofollow" target="_blank"><img src="http://blogdephp.com/wp-content/plugins/add-to-any/icons/linkedin.png" width="16" height="16" alt="LinkedIn" border="0" style="margin-right:20px; "/></a><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blogdephp.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share" border="0"/></a></div>
<script type="text/javascript"><!--
var a2a_config = a2a_config || {};
a2a_localize = {
   Share: "Compartilhar",
   Save: "Guardar",
   Subscribe: "Inscrever-se",
   Email: "E-mail",
Bookmark: "Marcador",
   ShowAll: "Mostrar tudo",
   ShowLess: "Mostrar menos",
   FindServices: "Buscar serviços(s)",
   FindAnyServiceToAddTo: "Buscar serviço",
   PoweredBy: "Serviço oferecido por",
   ShareViaEmail: "Compartilhar por e-mail",
   SubscribeViaEmail: "Inscrever-se por e-mail",
   BookmarkInYourBrowser: "Adicionar a marcadores de seu navegador",
   BookmarkInstructions: "Pressione Ctrl+D ou Cmd+D para marcar esta pagina",
   AddToYourFavorites: "Adicionar a favoritos",
   SendFromWebOrProgram: "Enviar de qualquer endereço de e-mail ou programa de e-mail",
EmailProgram: "Programa de e-mail"
};
a2a_config.linkname="Como fazer um login de usuarios em Php e Codeigniter?";
a2a_config.linkurl="http://blogdephp.com/php-login/";
//--></script><script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>
<div class="Info">
   <p><u><h2>Requerimentos necessarios em sua web hosting para poder executar o script</h2></u></p>
   <p> </p>   
   <p>Para poder implementar este script de login, se requer o framework de php "Codeigniter"</p>
   <p>(esta maravilhosa ferramenta nos ajuda a poupar muito tempo e esforço em nossos trabalhos de programação php).</p>
   <p> </p>
   <p>A empresa <a href="http://www.solo10.com/productos/WebHostingLinux/?safblogdephp">Solo10.com</a>, quando você contrata um pacote de hosting anual desde u$s 49.95,</p>
   <p>te oferece a instalação e configuração inicial do Codeigniter gratis :-)</p>
   <p> </p>   
   <p>Este blog e demo se encontram alojados nos servidores de Solo10.com.</p>
   <p>Te recomendo o <a href="http://www.solo10.com/productos/WebHostingLinux/?safblogdephp">serviço de hosting</a> que oferece esta empresa de línguaespanhola!</p>
</div>
<p> </p>   
<div class="Info">
   <p><a href="http://www.blogdephp.com/">Ver mais artigos e scripts de php e codeigniter</a></p>
</div>
</body>
</html>

Passo 3: Código para o modelo usuarios_model.php

<?php
class Usuarios_model extends CI_Model{
   function ValidarUsuario($email,$password){         //   Consulta Mysql para buscar na tabela Usuario aqueles usuarios que coincidam com o mail e password inscritos na tela de login
      $query = $this->db->where('Usuario',$email);   //   A consulta é efetuada mediante Active Record. Uma maneira alternativa, e em linguagem mais simples, de gerar as consultas Sql.
      $query = $this->db->where('Password',$password);
      $query = $this->db->get('Usuarios');
      return $query->row();    //   Retornamos ao controlador a fila que coincide com a busca. (FALSE no caso de não existirem coincidencias)
   }
}
?>

Paso 4: Consulta Mysql para criar a tabela de usuarios

CREATE TABLE `Usuarios` ( `Id` INT NOT NULL AUTO_INCREMENT , `Usuario` VARCHAR( 50 ) NOT NULL , `Password` VARCHAR( 50 ) NOT NULL , PRIMARY KEY ( `Id` ) ) ENGINE = MYISAM ; INSERT INTO `Usuarios` ( `Id` , `Usuario` , `Password` ) VALUES ( NULL , 'diego@blogdephp.com', 'blogdephp' );

Passo 5: Importante: pre-carregar bibliotecas de CodeIgniter para base de dados e validações de formulários

Abrir o arquivo autoload.php, situado na rota /application/config/" e localizar a seguinte linha:

$autoload['libraries']=array();

Substituí-la por:

$autoload['libraries'] = array('database','form_validation');

(isto é indispensável para poder utilizar os métodos de validações que nos oferece CodeIgniter).

Nota: A grande vantagem de carregar uma biblioteca a partir do arquivo autoload.php é que a seguir a temos disponível e podemos utilizá-la de qualquer parte do Framework. Do contrário, teríamos que carregar a biblioteca em todos os controladores em que ela seja necessária (ocasionando redundância de código).

Por que é importante um sistema de login de usuários

Como vocês puderam comprovar, trata-se de um script que, mediante poucas linhas de código, permite configurar o sistema de autenticação de usuários em seu próprio website.

Não é preciso dizer que esta implementação é sumamente importante em qualquer projeto e a necessitaremos em qualquer web que desenvolvamos, por simples que seja nossa aplicação. Isto se deve a que em qualquer website, medianamente avançado, seguramente existe certa informação e funções que nos interessam oferecer unicamente a usuários registrados e não ao resto do público. Assim como possibilitar que um usuário tenha salvado certa informação e esta esteja associada à sua conta, só visível por ele.

Pensemos na possibilidade de estar realizando um sistema web para um jornal. Nesse caso interessará que os jornalistas possam acessar o sistema (mediante um usuário e chave) e possam inscrever notícias ou outro tipo de artigos. Obviamente, esta função deveria ser acessível unicamente por jornalistas devidamente autenticados e não por outro tipo de usuário que possa acessar a web do meio de comunicação.

Funcionalidades desejáveis em um sistema de autenticação

A seguir vejamos uma lista das coisas que queremos ter disponíveis em um sistema de login de usuários.
  • Permitir acesso a determinada informação e funcionalidades, mas que este seja outorgado somente a determinados usuários, aqueles que se encontrem em uma tabela da base de dados de nossa aplicação web. Nós trabalharemos com MySQL.
  • Enviar uma mensagem de erro quando não foi indicado algum campo da tela de acesso autenticado.
  • Enviar uma mensagem de erro quando os dados executados para o login não coincidem com nenhum dos usuários existentes na base de dados.
  • Recordar os dados que o visitante tinha escritos, quando não supera o login e volta a ser mostrada a tela de acesso autenticado.

Explicação técnica dos scripts

Como vocês podem observar, os scripts deste sistema de login (listados no começo do artigo) estão comentados para uma maior facilidade de compreensão. Existem comentários para cada uma das sentenças importantes, que relatam de maneira resumida cada uma das funções que cumprem. Não obstante, tentaremos agora dar uma explicação geral de como funciona o sistema desenvolvido, de forma que as pessoas possam entendê-lo entender tão facilmente como se fosse uma historinha infantil :-)

Comecemos com a tela de acesso, que está na página login.php, onde o usuário poderá escrever seus dados de autenticação (usuário e password). Recordemos que em CodeIgniter tudo que se baseia na interação com o usuário (entrada e saída de dados) deve-se desenvolver por meio das visões (camada apresentação).

Aquí a sentença importante é a seguinte:

<?php echo form_open('php/login/'); ?>

Com isso se gera o formulário HTML para fazer o login e especificamos que seus dados devem ser enviados e processados pelo método login do controlador php. A função form_open é própria de CodeIgniter.

Outro ponto importante a ter em conta está na visão, no momento em que criamos os campos (ou seja, as caixas de texto onde usuário poderá escrever os dados de acesso para enviá-los à aplicação):

<input type="text" name="maillogin" value="<?= set_value('maillogin'); ?>" size="25" />

Aqui estamos criando um campo INPUT (de texto) chamado maillogin. A função set_value serve para recordar os dados preenchidos pelo usuário, no caso de que seu acesso não seja válido e tenhamos que tornar a mostrar a tela de acesso. Este simples detalhe oferece um valor a mais que permite uma maior usabilidade em nossa aplicação.

Agora podemos analisar o controlador php.php. Sem nenhuma dúvida, aqui reside a parte mais complexa do script. Por essa razão se colocaram comentários para cada uma das linhas de código, o que espero melhore sua compreensão. Sugiro que vocês comecem lendo diretamente os comentários no código fonte.

O controlador (php.php) toma os dados que nos são enviados do formulário de autenticação e realiza as validações correspondentes. Também consulta o modelo (usuarios_model.php) se o usuário e chave indicados existem em algum registro da tabela de usuários, ou seja, se o usuário e chave são válidos. Por último, este controlador decide se o usuário indicado pode ou não entrar na aplicação e comunica sua decisão à visão (login.php), que é a encarregada de mostrar a resposta correspondente na página.

Antes de terminar, me parece conveniente ressaltar algumas sentenças e declarações pontuais que são elementares em PHP e que por isso servirão para toda a aplicação web que você desenvolva.

$_POST['maillogin']
(Isto acessa os valores chegados do formulário no campo "maillogin")

$this->load->model('usuarios_model');
(Isto é um carregamento do modelo de usuários "usuarios_model", de modo que seus recursos possam ser utilizados nos controladores.)

$this->usuarios_model->ValidarUsuario($_POST['maillogin'],$_POST['passwordlogin']);
(Isto é uma chamada para executar o método ValidarUsuario que há no modelo usuarios_model, no que lhe passamos dois parâmetros).

Pensamos em melhorar este sistema de autenticação de usuários no futuro com coisas como implementar que um usuário possa acessar páginas exclusivas com informação unicamente válida e acessível por ele. Y como acessar a página sem ter que escrever em cada acesso seus login, ou seja, que tenha que escrevê-los uma única vez e que a aplicação se lembre deles em futuros acessos.

Espero que minhas explicações e scripts sejam de utilidade para os desenvolvedores em CodeIgniter e que não resulte difícil de implementar este sistema de login de usuários. Sobretudo, que as pessoas tenham podido aprender algo com este artigo.

É claro, se ficaram dúvidas ou se vocês quiserem realizar consultas, vocês podem publicar comentários e tratarei de responder para esclarecer o que for necessário.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato