Wednesday, September 26, 2018

Cara Login dengan PASSWORD BCRYPT hash CodeIgniter 3



Cara menggunakan Password_BCRYPT dan Password Verify untuk user login . Password Hash yang satu ini merupakan metode hash yang saat ini masih baru dan belum diadopsi secara massal , tidak seperti metode hash MD5 ataupun SHA1 ditambah salt. Cara kerja nya yaitu mengambil password yang dihasilkan dari input user , lalu di hash menjadi kode-kode abstrak yang hanya memiliki 1 kunci seperti :

$2y$12$sQ0Y6ZCtObf.iE52JAPkU.K0HYkgE0zJBeHoCpmzFhzLEiQIJ2pce

Metode ini disebut sebagai "ONE-WAY HASH" . Lalu kode abstrak tersebut disimpan kedalam database , dan ketika user melakukan login , akan dipanggil fungsi password verify yang membalikkan kode abstrak tersebut menjadi password semula ketika sign up (password si user) dan dibandingkan apakah sama atau tidak dengan input type ketika log in .

buatlah database dan table :
CREATE TABLE tbl_user(id int,email varchar(50),password varchar(100),username varchar(50) );

dan table session nya :
CREATE TABLE tbl_session(id varchar(40),email ip_address(45),timestamp int(10),data blob );

CodeIgniter menggunakan metode MVC , untuk view register:


untuk view login:


lalu untuk controller function register :
public function register(){
 $data = new stdClass();
 //Validation Rules
 $this->form_validation->set_rules('name_user', 'Full Name', 'trim|required|min_length[3]');
 $this->form_validation->set_rules('email_user', 'E-mail', 'trim|required|is_unique[tbl_user.email_user]', array('is_unique' => 'This username already exists. Please choose another one.'));
 $this->form_validation->set_rules('pass_user', 'Password', 'trim|required|min_length[8]');
 $this->form_validation->set_rules('conf_pass', 'Confirm Password', 'trim|required|min_length[8]|matches[pass_user]' , array('matches' => 'Password does not match.'));
 if ($this->form_validation->run() == false) {
  $this->load->view('registerview', $data);
 } else {
  $email_user= $this->input->post('email_user');
  $pass_user = $this->input->post('pass_user');
  $name_user = $this->input->post('name_user');
  if ($this->user_model->create_user($email_user, $pass_user, $name_user)) {
   redirect('indexpage');
  } else {
   redirect('register');
  }
 }
}

untuk controller function login :
public function login(){
 if($this->user_model->logged_id()){
  //jika memang session sudah terdaftar
  redirect('account/home');
 } else {
  $this->form_validation->set_rules('email_user', 'E-mail', 'required');
  $this->form_validation->set_rules('pass_user', 'Password', 'required');
  //jika session belum terdaftar
  if ($this->form_validation->run() == false) {
   $this->load->view('index');
  } else {
   $email_user= $this->input->post('email_user');
   $pass_user = $this->input->post('pass_user');
   $checking = $this->user_model->check_login($email_user,$pass_user);
   if ($checking == true) {
    foreach ($checking as $apps) {
     $session_data = array(
     'id_user' => $apps->id_user,
     'email_user' => $apps->email_user,
     'pass_user' => $apps->pass_user,
     'name_user' => $apps->name_user
    );
    $this->session->set_userdata($session_data);
    redirect('account/home');
   }
  } else {
   $this->load->view('index');
  }
 }
}

Kedua controller digabung menjadi 1 file account.php

dan yang terakhir adalah modelnya :
class user_model extends CI_Model {
 public function logged_id(){
 return $this->session->userdata('id_user');
}

//fungsi check login public function check_login($email_user,$pass_user){
 $this->db->where('email_user', $email_user);
 $query = $this->db->get('tbl_user');
 if ($query->num_rows() == 1) {
  $hash = $query->row('pass_user');
  if (password_verify($pass_user,$hash)){
   return $query->result();
  } else {
   echo "Wrong Password. Try again.";
  }
 } else {
  echo "Account is not existed.";
 }
}
public function create_user($email_user, $pass_user, $name_user) {
 $data = array(
  'email_user' => $email_user,
  'pass_user' => $this->hash_password($pass_user),
  'name_user' => $name_user,
  'created_at' => date('Y-m-j H:i:s'),
 );
 return $this->db->insert('tbl_user', $data);
}
private function hash_password($pass_user) {
 return password_hash($pass_user, PASSWORD_BCRYPT);
}

untuk file nya project masih dalam tahap pengerjaan sehingga tidak lengkap homepage dll
LINK DISINI

Load disqus comments

0 comments