Logowanie i rejestracja - Kontroler.

Tworzymy kontroler Users w folderze application\controllers nazwa kontrolera musi zaczynać się z dużej litery.

W kontrolerze, na początek, w konstruktorze dodajemy klasy pomocnicze i biblioteki, oczywiście możemy je dodać na stałe w pliku application\config\autoload.php dodajemy również bazę danych i ładujemy model, który utworzymy na następnej stronie.

Funkcja register zaczyna się od ustalenia reguł walidacji pól, jesli walidacja nie przejdzie, zostajemy przekierowani do widoku register, jeśli wszystko jest w porządku użytkownik zostaje utworzony. Hasło haszowane jest algorytmem SHA512, przy wiekszych aplikacja mozna użyć bcrypt, lub biblioteki dla codeigniter'a Ion Auth.

Analogicznie fukcja login zaczyna się od reguł walidacji, jeśli wprowadzone wartości je przejdą to nastepuje sprawdzenie użytkownika, hasła i logowanie.

Fukcja logout usuwawa dane użytkownika z sesji i na końcu ją niszczy. Dwie ostatnie fukcje sprawdzają, czy użytkownik i e-mail istnieją już w bazie. Jeśli tak jest rejestrowanie użytkownika zostanie zatrzymane ze stosownym komunikatem.


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Users extends CI_Controller {
 
    public function __construct(){
        parent::__construct();
        $this->load->helper(array('form', 'url'));
        $this->load->library(array('email','form_validation', 'session'));
        $this->load->database();
        $this->load->model('user_model');
    }
 
    public function register(){
        $this->form_validation->set_rules('name', 'Name', 'required|min_length[3]|max_length[30]');
        $this->form_validation->set_rules('username', 'Username', 'required|callback_check_username_exists');
        $this->form_validation->set_rules('email', 'Email', 'required|callback_check_email_exists');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[3]|max_length[30]');
        $this->form_validation->set_rules('password2', 'Confirm Password', 'matches[password]');
 
        if($this->form_validation->run() === FALSE){
            $this->load->view('register');
        } else {
            $enc_password = hash("sha512", $this->input->post('password'));
 
            $this->user_model->register($enc_password);
 
            $this->session->set_flashdata('user_registered', 'Jesteś zarejestrowany! Możesz się zalogować');
 
            redirect(base_url('login'));
        }
    }
 
    public function login(){
 
        $this->form_validation->set_rules('username', 'Username', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required');
 
        if($this->form_validation->run() === FALSE){
            $this->load->view('login');
        } else {
 
            $username = $this->input->post('username');
            $password = hash("sha512", $this->input->post('password'));
 
            $user_id = $this->user_model->login($username, $password);
 
            if($user_id){
 
                $user_data = array(
                    'user_id' => $user_id,
                    'username' => $username,
                    'logged_in' => true
                );
 
                $this->session->set_userdata($user_data);
 
                $this->session->set_flashdata('user_loggedin', '<h4>Jesteś zalogowany.</h4>');
 
                redirect(base_url('login'));
            } else {
                $this->session->set_flashdata('login_failed', '<h4><strong>Uwaga! </strong>Login / Hasło nieprawidłowe!</h4>');
 
                redirect(base_url('login'));
            }
        }
    }
 
    public function logout(){
 
        $this->session->unset_userdata('logged_in');
        $this->session->unset_userdata('user_id');
        $this->session->unset_userdata('username');
 
        $this->session->set_flashdata('user_loggedout', '<h5>Jesteś wylogowany.</h5>');
        redirect(base_url('login'));
        $this->session->sess_destroy();
    }
 
    public function check_username_exists($username){
        $this->form_validation->set_message('check_username_exists', 'Login istnieje, wybierz inny');
        if($this->user_model->check_username_exists($username)){
            return true;
        } else {
            return false;
        }
    }
 
    public function check_email_exists($email){
        $this->form_validation->set_message('check_email_exists', 'E-mail istnieje, wybierz inny');
        if($this->user_model->check_email_exists($email)){
            return true;
        } else {
            return false;
        }
    }
}

(Kliknij plus poniżej, aby przejść dalej)

Logowanie i rejestracja.
Czyli jak stworzyć podstawowy system logowania i rejestracji w frameworku Codeigniter.
keyboard_arrow_down
Stworzenie bazy danych i tabeli users. add
Stworzenie kontrolera, fukcji logowania i rejestracji, oraz reguł walidacji. add
Stworzenie modelu i wymiana informacji z bazą danych. add
Stworzenie części wizualnej, czyli widoków. add