Olá pessoal, recentemente tive que fazer um sistema de login em codeigniter e resolvi disponiblizar aqui. É um sistema bem simples que utiliza:

  • Banco de dados MySQL;
  • Framework CodeIgniter;
  • Geralmente utilizo a IDE Netbeans para programar em PHP;



Veja que a tabela de registro de usuários é a mais simples possível

CREATE TABLE IF NOT EXISTS `membership` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `status` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Você pode adicionar mais dados na sua tabela, como nome, telefone, endereço essas coisas, mas o básico é isso ai
* Não reparem mas gosto de todos os nome em ingles galera =)


Model: membership_model.php


Logo após isso precisamos criar um model com o nome membership_model.php dentro da pasta application/models com o seguinte conteúdo:

<?php
class Membership_model extends CI_Model {

    # VALIDA USUÁRIO
    function validate() {
        $this->db->where('username', $this->input->post('username')); 
        $this->db->where('password', md5($this->input->post('password')));
        $this->db->where('status', 1); // Verifica o status do usuário

        $query = $this->db->get('membership'); 

        if ($query->num_rows == 1) { 
            return true; // RETORNA VERDADEIRO
        }
    }

    # VERIFICA SE O USUÁRIO ESTÁ LOGADO
    function logged() {
        $logged = $this->session->userdata('logged');

        if (!isset($logged) || $logged != true) {
            echo 'Voce nao tem permissao para entrar nessa pagina. <a href="http://oficina2015/login">Efetuar Login</a>';
            die();
        }
    }
}

Procurei colocar o mais comentado possível mas em resumo o método validate() valida retorna True apenas se encontrar uma linha com username, password igual ao digitado no formulário e claro o status ainda deve ser 1 para o usuário estar ativo.


Controller: login.php


Bom agora para colocar a mão na massa devemos configurar algumas coisas no CodeIgniter. As configurações do CodeIgniter ficam dentro da pasta application/config

- No arquivo autoload.php devemos chamar as libraries: 'database' e 'session'

Uma novidade do CodeIgniter 2.0 é que agora as sessões são criptografadas e precisamos de uma chave de criptografica para colocar no arquivo config.php eu sempre uso uma string randomica gerada pelo site: http://www.random.org/strings/

Exemplo:

// Seu arquivo config.php deve ficar mais ou menos assim
$config['encryption_key'] = 'ZgHFyY7pCu8LPWpFEeRs';

Então iremos criar uma pasta chamada admin dentro de application/controllers/login. No arquivo routes.php dentro da pasta application/config/routes.php, vamos adicionar um controlador default para para a pasta login:

// Adicionar a seguinte rota para url login
$route['login'] = 'login/login';

* Note que ja efetuo as validações para o campo username e password não sejam mandados em branco.

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Login extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {

        // VALIDATION RULES
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_error_delimiters('<p class="error">', '</p>');


        // MODELO MEMBERSHIP
        $this->load->model('membership_model', 'membership');
        $query = $this->membership->validate();

        if ($this->form_validation->run() == FALSE) {

            $this->load->view('login/login_view');
        } else {

            if ($query) { // VERIFICA LOGIN E SENHA
                $data = array(
                    'username' => $this->input->post('username'),
                    'logged' => true
                );
                $this->session->set_userdata($data);
                redirect('login/area_restrita');
            } else {
                redirect($this->index());
            }
        }
    }
}

Views: login_view.php e area_restrita_view.php


Dentro da pasta de views do Codeigniter iremos criar uma pasta como o nome de login também para separar os arquivos do site dos arquivos da área de administração. Dentro dessa pasta teremos um arquivo como o nome login_view.php que será o formulário de login e também é o default da classe login então é o primeiro arquivo a ser chamado.

<!DOCTYPE html>
<html>
    <head>
        <title>Área Restrita</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style type="text/css">
            body {background: #FFF; font-family: Verdana; font-size: 9pt; }
            #form_login { width: 500px; margin: 0 auto; padding: 20px; background: #F2F2F2; border: 1px solid #B7B7B7; }
            label { display: block; margin-bottom: 0.3em; }
            input[type=text], input[type=password] { border: 1px solid #666; display: block; margin-bottom: 1em; padding: 2px; width: 100%; }
            input[type=text], input[type=password] { display: block; }
            h1 { margin: 0 0 1em 0; text-align: center; }
            .error { background: none repeat scroll 0 0 #FBE6F2; border: 1px solid #D893A1; padding: 5px; }
        </style>
    </head>
    <body>

        <h1>Tela de Login</h1>
        <div id="form_login">
            <?php echo validation_errors(); ?>
            <?php
            echo form_open();

            echo form_label('Username', 'username');
            echo form_input('username', '');

            echo form_label('Password', 'password');
            echo form_password('password', '');

            echo form_submit('submit', 'Entrar no sistema');
            ?>
            <?php form_close(); ?>
        </div>
    </body>
</html>

Notem que esse é um formulário de login bem simples coloquei um pouquinho de CSS pra não ficar tão feio assim. Bom esse se você configurou tudo certinho agora quando você efetuar um login no site ele irá redirecionar você para o controlador area_restrita.php que chama a view area_restrita_view.php. No controlador devemos colocar uma proteção para caso alguém saiba a url em questão não possa visualizar o conteúdo e seja redirecionada para outro lugar.


Controlador: area_restrita.php

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Area_restrita extends CI_Controller {
    
    function __construct() {
        parent::__construct();
        $this->load->model('membership_model', 'membership');
        $this->membership->logged();
    }
    
    public function index() {
        
        $this->load->view('login/area_restrita_view');
        
    }
}

Bom aqui é simples no construtor da classe chamamos o model membership e usamos o método logged() que verifica a sessão e permite ou não o a execução desse controlador. Só falta agora a area_restrita_view().

View: area_restrita_view

<!DOCTYPE html>
<html>
    <head>
        <title>Área Restrita</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Área Restrita</h1>
    </body>
</html>

Nesse ponto se tudo deu certo você pode criar a área de administração para o seu site =). Esse é mais um tutorial pra quem já sabe programar e tem um médio conhecimento de #Codeigniter, não foi explicado conceitos sobre como funciona #MVC nem sobre a estrutura do #Codeigniter, mas dá pra se virar bem ;)

Abraços