Arquivo da categoria: CodeIgniter

CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications. If you’re a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you’re tired of ponderously large and thoroughly undocumented frameworks

Sistema de Login com CodeIgniter

Olá pessoal, como primeiro post vou colocar aqui um sistema de autenticação de usuário que precisei fazer esses dias no meu trabalho. É 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 nomes 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')); // PEGA POR POST O VALOR DO CAMPO USERNAME
        $this->db->where('password', md5($this->input->post('password'))); // PEGA POR POST O VALOR DO PASSWORD
        $this->db->where('status', 1); // VERIFICA SE O USUÁRIO ESTÁ ATIVO (TEM O VALOR = 1)

        $query = $this->db->get('membership'); // FAZ O SELECT COM OS PARAMETROS ACIMA

        if ($query->num_rows == 1) { // VERIFICA SE TEM APENAS UMA LINHA NA CONSULTA
            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="../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