WHAT'S NEW?
Loading...

Registration dengan Verifikasi Email di CodeIgniter




Yak, langsung saja
Disini saya asumsikan pembaca sudah paham basic dari CodeIgniter terutama konsep OOP


1. Buat tablenya

CREATE TABLE IF NOT EXISTS tbl_user
(
    id_user INT(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(id_user),
    email VARCHAR (30),
    username VARCHAR(12),
    password VARCHAR(32),
    status ENUM ('Aktif','Tidak Aktif') DEFAULT 'Tidak Aktif'
);


2. Load library email
$autoload['libraries'] = array('email');
atau bisa langsung di controller atau modelnya dengan "$this->load->library('email');"


3. Controller

public function simpanUser() {
    $data = array(
      'email'  => $this->input->post('email'),
      'username'  => $this->input->post('username'),
      'password'  => md5($this->input->post('password'))
    );

    if ($this->nuroaki->_simpanUser($data)) {
      if ($this->nuroaki->send($this->input->post('email'),$this->input->post('username'))) {
        $this->session->set_flashdata(md5('sukses'), "Anda berhasil melakukan registrasi, silahkan periksa pesan masuk email Anda untuk mengaktifkan akun yang baru Anda buat");
        // redirect ke halaman login
        redirect('/url/login'); 
      } else {
        $this->session->set_flashdata(md5('gagal'), "Terjadi kesalahan dalam melakukan registrasi, silahkan coba lagi!");
        // redirect ke halaman register, untuk melakukan register ulang
        redirect('/url/register');
      }
    }
  }

public function verify($hash=NULL) {
    if ($this->nuroaki->verifyEmail($hash)) {
      $this->session->set_flashdata(md5('sukses'), "Email sukses diverifikasi!");
      redirect('/url/login');
    } else {
      $this->session->set_flashdata(md5('notification'), "Email gagal terverifikasi");
      redirect('/url/register');
    }
  }


4. Model

public function _simpanUser($data) {
    // gunakan return untuk mengembalikan nilai ke controller yang nantinya akan dioper lagi ke proses email
    return $this->db->insert('tbl_user', $data);
  } 

public function sendMail($email,$username) {
    
    $from_email = 'ahmad.uji1902@gmail.com'; // ganti dengan email kalian
    $subject = 'Verify Your Email Address';
    $message = 'Dear '. $username .',<br /><br />
                Please click on the below activation link to verify your email address.<br /><br />
                http://urlwebsitenya/action/verify/' . md5($email) . '<br /><br /><br />
                Thanks<br />
                Nuroaki';

    $config['protocol'] = 'smtp';
    $config['smtp_host'] = 'ssl://smtp.gmail.com'; // sesuaikan dengan host email
    $config['smtp_timeout'] = '7';
    $config['smtp_port'] = '465'; // sesuaikan
    $config['smtp_user'] = $from_email;
    $config['smtp_pass'] = 'password'; // ganti dengan password email
    $config['mailtype'] = 'html';
    $config['charset'] = 'iso-8859-1';
    $config['wordwrap'] = TRUE;
    $config['newline'] = "\r\n";
    $config['crlf'] = "\r\n";
    $this->email->initialize($config);

    $this->email->from($from_email, 'Nuroaki');
    $this->email->to($email);
    $this->email->subject($subject);
    $this->email->message($message);
    // gunakan return untuk mengembalikan nilai yang akan selanjutnya diproses ke verifikasi email
    return $this->email->send();
  }

  public function verify($key) {
    // nilai dari status yang berawal dari Tidak Aktif akan diubah menjadi Aktif disini
    $data = array('status' => "Aktif");
    $this->db->where('md5(email)', $key);
    return $this->db->update('tbl_user', $data);
  }


5. Routes

Link untuk ke verifikasi, action adalah nama controller, dan verify methodnya

$route['verify/(:any)'] = "/action/verify/$1";


Semoga membantu :)

0 comments:

Post a Comment