Requisitos:
- XAMPP Control Panel.
- MySQL Workbench o phpMyAdmin.
- Visual Studio Code o Sublime Text 3
- CodeIgniter v3.1 (Framework PHP)
- Bootstrap (HTML5 y CSS3)
Lo que veremos en este tutorial:
- Estructura del proyecto.
- Configurar achivos de la aplicación
- Crear modelo de datos login.
- Crear controlador login.
- Crear la vista login.
- Crear logout (cerrar sesión).
- Conclusiones.
1. Estructura del proyecto.
2. Configurar archivos de la aplicación.
Después de crear la base de datos, seguidamente pasamos a configurar los archivos en relación al ecosistema del Framework CodeIgniter:
2.1. Se agregará la url base de nuestro proyecto en el parámetro $config['base_url'] del archivo config.php:
RUTA DEL ARCHIVO: ..\login-app-web-with-codeigniter\application\config\config.php
PARAMÉTRO: $config['base_url'] = 'http://localhost/login-app-web-with-codeigniter/';
Recordemos que puedes aplicar $_SERVER para controlar las rutas y ubicaciones de script en relación a PHP.
RUTA DEL ARCHIVO: ..\login-app-web-with-codeigniter\application\config\database.php
'username' => 'root',
'password' => '',
'database' => 'demo',
'dbdriver' => 'mysqli',
2.3. Asignar el controlador inicial por defecto desde el archivo routes.php:
..\login-app-web-with-codeigniter\application\config\routes.php
$route['default_controller'] = 'login/login';
3. Crear modelo de datos login.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <?php /** * @author Hadson Paredes * @email info@hadsonpar.com */ defined('BASEPATH') or exit('No direct script access allowed'); class Login_model extends CI_Model { // declare private variable private $_userID; private $_name; private $_userName; private $_email; private $_password; private $_status; public function setUserID($userID) { $this->_userID = $userID; } public function setName($name) { $this->_name = $name; } public function setUserName($userName) { $this->_userName = $userName; } public function setEmail($email) { $this->_email = $email; } public function setPassword($password) { $this->_password = $password; } public function setStatus($status) { $this->_status = $status; } public function getUserInfo() { $this->db->select(array('u.user_id', 'u.user_name', 'u.name', 'u.email')); $this->db->from('user as u'); $this->db->where('u.user_id', $this->_userID); $query = $this->db->get(); return $query->row_array(); } function login() { $this->db->select('user_id, name, email'); $this->db->from('user'); $this->db->where('email', $this->_email); $this->db->where('password', $this->_password); $this->db->limit(1); $query = $this->db->get(); if ($query->num_rows() == 1) { return $query->result(); } else { return false; } } } |
4. Crear controlador login.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | <?php /** * Description of Users Controller * @author Hadson Paredes * @email info@hadsonpar.com */ defined('BASEPATH') or exit('No direct script access allowed'); class Login extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('Login_model', 'user'); } // Dashboard method public function index() { if ($this->session->userdata('is_authenticated') == FALSE) { redirect('login/login'); // el usuario no ha iniciado sesión, redirigirlo! } else { $data['title'] = 'Welcome - Hadsonpar'; $data['metaDescription'] = 'Dashboard'; $data['metaKeywords'] = 'Dashboard'; $this->user->setUserID($this->session->userdata('user_id')); $data['userInfo'] = $this->user->getUserInfo(); $this->load->view('login/dashboard', $data); } } // Login method public function login() { if ($this->session->userdata('is_authenticated') == TRUE) { redirect('Login/index'); // el usuario no ha iniciado sesión, redirigirlo! } else { $data['title'] = 'Login - Hadsonpar'; $data['metaDescription'] = 'Hadsonpar'; $data['metaKeywords'] = 'Login'; $this->load->view('login/index', $data); } } // Login Action function doLogin() { // Validacion del formulario $this->load->library('form_validation'); $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); if ($this->form_validation->run() == FALSE) { //Error en la validación de campos //Redirigir a la página de inicio de sesión $this->load->view('login/login'); } else { $sessArray = array(); //Validación de campo exitosa. //Validar contra los datos de la base de datos $email = $this->input->post('email'); $password = $this->input->post('password'); $this->user->setEmail($email); $this->user->setPassword(MD5($password)); //Consulta para la base de datos $result = $this->user->login(); if ($result) { foreach ($result as $row) { $sessArray = array( 'user_id' => $row->user_id, 'name' => $row->name, 'email' => $row->email, 'is_authenticated' => TRUE, ); $this->session->set_userdata($sessArray); } redirect('login'); } else { redirect('login/login?msg=1'); } } } } |
5. Crear la vista login.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php $this->load->view('templates/header'); ?> <main role="main"> <div class="container"> <div class="row" id="sign-up-form"> <div class="col-6 text-center"> <img src="<?php print HTTP_IMAGES_PATH; ?>user-check-icon.png" alt="Hadsonpar"> </div> <div class="col-6 text-left"> <form action="<?php echo base_url(); ?>login/dologin" method="post" id="loginform" name="Login_Form" class="form-signin" method="POST"> <h3 class="form-signin-heading">Login form with CodeIgniter</h3> <?php if (validation_errors()) { ?> <div class="alert alert-danger"> <?php echo validation_errors(); ?> </div> <?php } ?> <?php if (!empty($this->input->get('msg')) && $this->input->get('msg') == 1) { ?> <div class="alert alert-danger"> Favor de ingresar datos válidos. </div> <?php } ?> <?php if (validation_errors()) { ?> <div class="alert alert-danger"> <?php echo validation_errors(); ?> </div> <?php } ?> <div class="form-group"> <label for="name">Email</label> <input type="email" class="form-control" id="email" name="email" placeholder="Email*" required /> </div> <div class="form-group"> <label for="name">Password</label> <input type="password" class="form-control" id="password" name="password" placeholder="Password" required /> </div> <button type="submit" class="btn btn-primary" style="float:right">LOGIN</button> </form> </div> </div> </div> </div> </main> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php $this->load->view('templates/header'); ?> <br> <main role="main" class="text-center"> <div id="confirmation"> <div> <img src="<?php echo HTTP_IMAGES_PATH; ?>user-check-icon.png" alt=""> <h1>Dashboard...</h1> <h2>Acceso correctamente a la aplicación web</h2> <h3 class="cupon-pop">Bienvenido: <strong><?php if(!empty($userInfo)) { print $userInfo['name']; } else {print "User"; }?></strong></h3> </div> <hr> <div> <div class="col-lg-12"> <a class="btn btn-danger btn-sm" href="http://blog.hadsonpar.com/search/label/CodeIgniter" target="_blank"><i class="fa fa-code"></i> Tutoriales en CodeIgniter</a> <a class="btn btn-sm btn-primary" href="<?php echo base_url(); ?>login/logout"><i class="fa fa-sign-out" aria-hidden="true"></i> Logout <span class="sr-only">(current)</span></a> </div> </div> </div> </main> <br> <?php $this->load->view('templates/footer'); ?> |
6. Crear logout (cerrar sesión).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php /** * Description of Users Controller * @author Hadson Paredes * @email info@hadsonpar.com */ defined('BASEPATH') or exit('No direct script access allowed'); class Login extends CI_Controller { // Logout public function logout() { $this->session->unset_userdata('user_id'); $this->session->unset_userdata('name'); $this->session->unset_userdata('email'); $this->session->unset_userdata('is_authenticated'); $this->session->sess_destroy(); $this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0"); $this->output->set_header("Pragma: no-cache"); redirect('/'); } } |
7. Conclusiones
En esta segunda parte creamos todos los archivos en relacion al acceso a la aplicacion teniendo en consideracion a la tabla user en nuestra base datos demo, seguidamente creamos la funcionalidad de cerrar sesión, finalmente reusamos los recursos de tipo template como footer, header y menus en la vistas login y dashboard.
0 Comentarios