الجزء الثاني Codeigniter Authentification


فهاد الجزء الثاني غادي نشوفو كيفاش نزيدو لModel ولController لي غادي يمكنا من إضافة المستخدم فقاعدة البيانات كما غادي يمكن المستخدم من تسجيل الدخول ديالو بإستعمال البريد الإلكتروني وكلمة المرور.

نظرة سريعة بالفيديو

- ملفات التسجيل والدخول

أول حاجة غادي نزيدو الملفات لي غادي تمكن المستخدم من التسجيل والدخول غادي نمشي لviews ونزيد مجلد نسميه users فهاد المجلد غادي نزيد ملف نسميه create.php والملف الثاني غادي نسميه login.php الكود ديالهم هو :

                                <!--create.php code -->

<?php $this->load->view('includes/header');?>
  <body>
    <?php $this->load->view('includes/menu');?>

    <div class="container">    
        <div  style="margin-top:50px;" class="mainbox col-md-14  col-sm-14 col-md-offset-3">                    
            <div class="panel panel-custom">
                <h3 class="text-center custom"><strong>Inscription</strong></h3>
                <div style="padding-top:30px" class="panel-body">
                    <?php echo validation_errors('<div class="alert alert-danger">','</div>');?>
                    <form class="form-horizontal" method="post" action="<?php echo base_url();?>users/register">
                            <div class="form-group">
                                <label for="Nom" class="col-sm-8 control-label">Nom & prénom*</label>
                                <div class="col-sm-10 col-sm-offset-2">
                                    <input type="text" class="form-control" id="nom" name="nom" placeholder="Nom & Prénom" value="<?php echo set_value('nom');?>"/>
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="email" class="col-sm-8 control-label">Email*</label>
                                <div class="col-sm-10 col-sm-offset-2">
                                    <input type="email" class="form-control" id="email" name="email" placeholder="Email" value="<?php echo set_value('email');?>">
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="passe" class="col-sm-8 control-label">Mot de passe*</label>
                                <div class="col-sm-10 col-sm-offset-2">
                                    <input type="password" class="form-control" id="passe" name="passe" placeholder="Mot de passe" value="<?php echo set_value('passe');?>">
                                </div>
                            </div>
                            <div class="form-group deposer">
                                <div class="col-sm-offset-10 col-sm-8">
                                    <button type="submit" class="btn btn-custom">Valider</button>
                                </div>
                            </div>
                        </form>
                 </div>
            </div>
       </div>
  </body>
<?php $this->load->view('includes/footer');?>
   
<!--login.php code -->

<?php $this->load->view('includes/header');?>
  <body>
    <?php $this->load->view('includes/menu');?>

    <div class="container">    
        <div  style="margin-top:50px;" class="mainbox col-md-14  col-sm-14 col-md-offset-3">                    
            <div class="panel panel-custom">
                <h3 class="text-center custom"><strong>Connexion</strong></h3>
                <div style="padding-top:30px" class="panel-body">
                    <?php echo validation_errors('<div class="alert alert-danger">','</div>');?>
                    <?php if($this->session->flashdata('login_failed')):?>
                    <div class="alert alert-danger">
                    <?php echo $this->session->flashdata('login_failed');?>
                    </div>
                    <?php endif;?>
                    <form class="form-horizontal" method="post" action="<?php echo base_url();?>users/auth">
                            <div class="form-group">
                                <label for="email" class="col-sm-8 control-label">Email*</label>
                                <div class="col-sm-10 col-sm-offset-2">
                                    <input type="email" class="form-control" id="email" name="email" placeholder="Email" value="<?php echo set_value('email');?>">
                                </div>
                            </div>
                            <div class="form-group">
                                <label for="passe" class="col-sm-8 control-label">Mot de passe*</label>
                                <div class="col-sm-10 col-sm-offset-2">
                                    <input type="password" class="form-control" id="passe" name="passe" placeholder="Mot de passe" value="<?php echo set_value('passe');?>">
                                </div>
                            </div>
                            <div class="form-group deposer">
                                <div class="col-sm-offset-10 col-sm-8">
                                    <button type="submit" class="btn btn-custom"> Connexion</button>
                                </div>
                            </div>
                        </form>
                 </div>
            </div>
       </div>
  </body>
<?php $this->load->view('includes/footer');?>

                           
                            

- أول controller Users.php

غادي نزيدو الcontroller ديالنا لي غادي يمكنا من التواصل مع قاعدة البيانات عبر ل Model غادي نمشي لcontrollers وغادي نزيد ملف جديد نسميه Users.php فهاد الملف غادي يكونوا لfunctions لي غادي يديرو التحقق بلي حتى شي حقل ما فارغ وغادي يتصلو بلModel لي غادي نزيدو من بعد باش نسجل أو نتأكد بلي المستخدم لي كيحاول الدخول سابقلو تسجل فقاعدة البيانات الكود النهائي ديال هاد الملف هو :

                                <?php

class Users extends CI_Controller {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('index');
	}
    public function create()
	{
		$this->load->view('users/create');
	}
    public function register()
    {
        if($this->session->userdata("logged")){
        redirect(base_url().'categories');
        } 
        $this->form_validation->set_rules('nom','Nom','required|trim|min_length[3]');
        $this->form_validation->set_rules('email','Email','required|trim|valid_email|is_unique[users.email]');
        $this->form_validation->set_rules('passe','Mot de passe','required|trim|min_length[3]');
            if($this->form_validation->run() == FALSE){
                $data = array(
                'requires' => validation_errors()
                );
                $this->session->set_flashdata($data);
                $this->load->view('users/create',$data);
            }else{
                if($this->User->register_user()){
                    $this->session->set_flashdata('registred','Compte créé avec succés');
                    redirect(base_url().'home');
                }
            }
	}
    public function login()
	{
		$this->load->view('users/login');
	}
    public function auth(){
        if($this->session->userdata("logged")){
           redirect(base_url().'home');
        } 
        $this->form_validation->set_rules('email','Email','required|trim|valid_email');
        $this->form_validation->set_rules('passe','Mot de passe','required|trim|min_length[3]');
        if($this->form_validation->run() == FALSE){
            $data = array(
             'errors' => validation_errors()
            );
            $this->session->set_flashdata($data);
            $this->load->view('users/login',$data);
        }else {
            $email = $this->input->post('email');
            $password = $this->input->post('passe');
            $user = $this->User->login_user($email,$password);
            if($user == 'password_incorrect'){
                $this->session->set_flashdata('login_failed','L\'email ou le mot de passe est incorrect.');
                redirect(base_url()."users/login");
            }elseif($user == 'email_incorrect'){
                $this->session->set_flashdata('login_failed','L\'email ou le mot de passe est incorrect.');
                redirect(base_url()."users/login");
            }else{
                $user_data = array(
                    'nom'=> $user->nom,
                    'logged' => true
                );
                $this->session->set_userdata($user_data);
                redirect(base_url().'home');
            }   
        }
    }
    public function logout(){
        $this->session->unset_userdata('nom');
        $this->session->unset_userdata('logged');
        redirect(base_url().'home');
    }
}

                            

- أول Model User.php

غادي نزيدو model ديالنا لي غادي يمكنا من التسجيل فقاعدة البيانات غادي نمشي ل Models وغادي نزيد ملف جديد نسميه User.php فهاد الملف غادي يكونوا لfunctions لي غادي يمكننا من التسجيل والدخول الكود النهائي ديال هاد الملف هو :

                                <?php
class User extends CI_Model {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	 public function register_user(){
        $options = array('cost'=>12);
        $encrypted_pass = password_hash($this->input->post('passe'),PASSWORD_BCRYPT,$options);
        $data = array(
            'nom' => trim($this->input->post('nom')),
            'email' => trim($this->input->post('email')),
            'passe' => $encrypted_pass
        );
        $this->db->insert('users',$data);
        return true;
     }
     public function login_user($email,$password){
            $this->db->select('*');
            $this->db->from('users');
            $this->db->where('email',$email);
            $results = $this->db->get();
            if($results->num_rows() == 1){
                $user = $results->row();
                $db_password = $user->passe;
            if(password_verify($password,$db_password)){
                return $user;
            }else{
                return 'password_incorrect';
            }
            }else{
                return 'email_incorrect';
            }
     }
}

                            

- الصفحة الرئيسية

الصفحة الرئيسية غادي تكون صفحة بسيطة غادي تعرض الإسم ديال المستخدم يلا كان متصل والرسالة ديال نجاح التسجيل أو فشلو باش نصاوبها غادي نمشي ل views وغادي نزيد ملف جديد نسميه index.php الكود النهائي هو :

                                    <?php $this->load->view('includes/header');?>
  <body>
    <?php $this->load->view('includes/menu');?>
    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <?php if($this->session->flashdata('registred')):?>
    <div class="alert alert-success">
    <?php echo $this->session->flashdata('registred');?>
    </div>
    <?php endif;?>
    <?php if($this->session->userdata('logged')):?>
       <p class="lead">Bienvenue <span class="label label-success"><?php echo $this->session->userdata("nom");?></span> Vous êtes connectés.</p>
    <?php endif;?>
  </body>
<?php $this->load->view('includes/footer');?>

                                

- آخر الإضافات

آخر الإضافات غادي نزيدهم ف application/config/autoload.php وف application/config/routes.php لي غادي تمكنا من تحديد ل controller الرئيسي وإضافة لModel وباقي الحزمات لي غادي نحتاجو الكود النهائي ديالهم :

                                    <?php
// autoload.php code

defined('BASEPATH') OR exit('No direct script access allowed');
$autoload['drivers'] = array();
$autoload['helper'] = array('url','form');
$autoload['config'] = array();
$autoload['language'] = array();
$autoload['model'] = array('User');

//routes.php code 

defined('BASEPATH') OR exit('No direct script access allowed');
$route['default_controller'] = 'home';
$route['404_override'] = 'home';
$route['translate_uri_dashes'] = FALSE;
                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد