Hai kembali lagi di kodekreasi.com . Pada kesempatan kali ini saya akan membagikan sebuah tutorial tentang cara membuat Rest API login dan register dengan mysqli. Sedikit penjelasan pada tutorial PHP yang akan kita buat kali ini ,kita akan membuat Rest Api pada sisi server dan untuk mencobanya nanti kita akan menggunakan Aplikasi POSTMAN yang dapat kalian download secara gratis. Untuk penggunaan sendiri Rest API login dan register ini bisa kalian integrasikan dengan project aplikasi android yang sedang kalian buat atau mau kalian integrasikan dengan website yang sedang kalian buat. Untuk melakukan komunikasi ke database mysql pada tutorial ini kita gunakan mysqli. Yuk langsung simak tutorialnya Membuat REST API Login dan Register Dengan MysQLi.

Persiapan Membuat REST API Login dan Register Dengan MySQLi

Untuk mengikuti Tutorial PHP kali ini ada beberapa hal yang perlu anda siapkan diantaranya :

  1. Pastikan anda telah menginstall text editor seperti Notepad++ ,Sublime Text atau Visual Studio Code untuk menuliskan kode program yang akan kalian buat.
  2. Lakukan installasi Xampp pada laptop atau pc kalian.
  3. Install Postman pada pc atau laptop kalian.

Langkah-langkah Membuat REST API Login dan Register Dengan MySQLi

  • Buka php myadmin kemudian buat database baru.
  • Pastekan query berikut pada database yang telah kalian buat :
-- phpMyAdmin SQL Dump
-- version 4.9.0.1
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Generation Time: Jan 18, 2020 at 03:48 PM
-- Server version: 10.4.6-MariaDB
-- PHP Version: 7.1.32
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `tes`
--
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `user_username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `unique_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `user_email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
  • Buat folder project kalian didalam folder htdocs kalian.
  • Buka text editor kalian kemudian buat folder baru bernama config dan simpan di folder project kalian.
  • Didalam folder config buat file dengan nama koneksi.php kemudian isikan dengan skribt berikut :
<?php
$host     = 'localhost';
$user     = 'root'; // diisi dengan user database kalian biasanya
                    // defaultnya bernama root jika kita belum 
                    // merubahnya
$password = '';  //diisi dengan password database kalian biasanya
                 // defaultnya kosong
$db       = 'tes'; //diisi dengan nama database kalian
$link = mysqli_connect($host, $user, $password, $db) or die(mysqli_error());
?>

Sedikit penjelasan scribt diatas digunakan untuk melakukan koneksi ke database kalian. Untuk melakukan koneksi kedatabase di sini kita menggunakan mysqli.

  • Setelah itu keluar dari folder config dan buat file baru bernama register.php dan isikan scribt sebagai berikut kemudian simpan di folder project kalian tadi:
<?php 
//meng include kan halaman init.php
require_once "core/init.php";
// json response array
$response = array("error" => FALSE);
if (isset($_POST['name']) && isset($_POST['password']) && isset($_POST['email'])) {
 
    // menerima parameter POST ( name, password, email )
    $name = $_POST['name'];
    $password = $_POST['password'];
    $email = $_POST['email'];
    //mengecek id apakah sudah pernah daftar atau belum
    if( cek_nama($name) == 0 ){
      //mendaftarkan user baru
      $user = register_user($name, $password, $email);
      if($user){
        // simpan user berhasil
        $response["error"] = FALSE;
        $response["user"]["name"] = $user["user_username"];
        $response["user"]["key"] = $user["unique_id"];
        echo json_encode($response);
      }else{
        // gagal menyimpan user
        $response["error"] = TRUE;
        $response["error_msg"] = "Terjadi kesalahan saat melakukan        registrasi";
        echo json_encode($response);
      }
    }else{
      // user telah ada
      $response["error"] = TRUE;
      $response["error_msg"] = "User telah ada ";
      echo json_encode($response);
    }
}
?>

Untuk alur kerja dari scribt register diatas adalah menerima data user kemudian mengecek apakah nama user sudah terdaftar atau belum jika belum maka data akan disimpan kedalam database.

  • Buka folder config kemudian buat file baru dengan nama functions.php . Isikan file functions.php dengan scribt program sebagai berikut :
<?php
//-------------- mendaftarkan user -------------------//
function register_user($name, $password, $email){
  global $link;
     
  //mencegah sql injection
  $nama = escape($name);
  $pass = escape($password);
 
  $hash = hashSSHA($pass); //mengencrypt password
 
  $salt = $hash["salt"]; //berisi kode string random yang nantinya                             digunakan saat proses decrypt pada proses validasi
 
  $encrypted_password = $hash["encrypted"]; //mengambil data password yang sudah di enkripsi untuk ditampung pada variabel encrypted_password
   
     
  $query = "INSERT INTO users(user_username, user_password, unique_id, user_email) VALUES('$nama', '$encrypted_password', '$salt', '$email') ON DUPLICATE KEY UPDATE unique_id = '$salt'";
  
  $user_new = mysqli_query($link, $query);
  if( $user_new ) {
        $usr = "SELECT * FROM users WHERE user_username = '$nama'";
        $result = mysqli_query($link, $usr);
        $user = mysqli_fetch_assoc($result);
        return $user;
  }else{
        return NULL;
  }
}
//-------------- *** end *** -------------------//
 
//---- mencegah sql injection -----//
function escape($data){
    global $link;
    return mysqli_real_escape_string($link, $data);
}
//----------- *** end *** ---------//
 
//--- mengecek nama apakah sudah terdaftar atau belum ---//
function cek_nama($name){
    global $link;
    $query = "SELECT * FROM users WHERE user_username = '$name'";
    if( $result = mysqli_query($link, $query) ) return mysqli_num_rows($result);
}
//---------------- *** end ***-------------------------//
 
//------------ mengenkripsi password ----------------//
function hashSSHA($password) {
    $salt = sha1(rand());
    $salt = substr($salt, 0, 10);
    $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
    $hash = array("salt" => $salt, "encrypted" => $encrypted);
    return $hash;
}
//------------ *** end *** -------------------------//
 
// -------- mengenkripsi password yang dimasukkan user saat login -->
public function checkhashSSHA($salt, $password) {
    $hash = base64_encode(sha1($password . $salt, true) . $salt);
    return $hash;
}
//------------ *** end *** -------------------------//
//----------------- cek data user dan validasi------------------//
function cek_data_user($name,$pass){
    global $link;
    //mencegah sql injection
    $nama = escape($name);
    $password = escape($pass);
    
    $query  = "SELECT * FROM users WHERE user_username = '$nama'";
    $result = mysqli_query($link, $query);
    $data = mysqli_fetch_assoc($result);
    
    $unique_id = $data['unique_id'];
    $encrypted_password = $data['user_password'];
    // mengencrypt password
    $hash = checkhashSSHA($unique_id, $password);
    //validasi password
    if($encrypted_password == $hash){
        return $data;
    }else{
        return false;
    }
}
//---------------------- *** end *** -------------------------//
?>
  • Kemudian keluar lagi dari folder config dan tambahkan folder baru dengan nama core .
  • Masuk kedalam folder core kemudian tambahkan file baru dengan nama init.php . Isikan file init.php dengan scribt seperti berikut ini :
<?php
require_once "config/koneksi.php";
require_once "config/functions.php";
?>

Sebenarnya file init.php diatas hanya untuk memudahkan kita saat proses include file-file yang akan kita butuhkan sehingga kita tidak perlu mengincludekanya satu persatu lagi kedalam file tersebut cukup includekan file init.php ini sehingga akan sangat menghemat waktu jika file yang akan diincludekan cukup banyak.

  • Didalam folder project kalian dimana file register.php berada tambahkan file baru dengan nama login.php . Isikan scribt berikut pada file login.php :
<?php 
require_once "core/init.php";
//mengecek parameter post
if (isset($_POST['name']) && isset($_POST['password'])) {
    
    //menampung parameter ke dalam variabel
    $nama  = $_POST['name'];
    $pass = $_POST['password'];
     
    $user = cek_data_user($nama,$pass);//validasi user
    if($user != false){
        //jika berhasil login
        $response["error"] = FALSE;
        $response["user"]["name"] = $user["user_username"];
        $response["user"]["user_key"] = $user["unique_id"];
        echo json_encode($response);
    }else{
        // user tidak ditemukan password/email salah
        $response["error"] = TRUE;
        $response["error_msg"] = "Login gagal. Password/Nik salah";
        echo json_encode($response);
    }
}else{
    $response["error"] = TRUE;
    $response["error_msg"] = "Nik atau Password tidak boleh kosong !";
    echo json_encode($response);
}
?>

Jika kalian masih kebingungan tentang struktur file yang telah saya buat berikut adalah gambar struktur file yang telah saya buat :

Membuat REST API Login dan Register Dengan MySQLi

Testing Scribt Program :

Untuk melakukan pengetesan pada script program API Login dan Registrasi Menggunakan PHP dan mysqli ini saya menggunakan POSTMAN . Aplikasi POSTMAN disini akan bertindak sebagai REST client dari REST Api server yang telah kita buat tadi dengan tujuan untuk mengetahui REST server dapat berjalan atau tidak sebelum diimplementasikan ke REST client sesungguhnya. Berikut adalah hasilnya :

  • Api register user

Untuk mencoba REST Api register yang telah kita buat menggunakan postman terlebih dahulu atur methodnya menjadi POST kemudian di bagian body -> form-data isikan data key dan valuenya seperti pada gambar dibawah ,kemudian klik tombol send. Jika register berhasil maka akan didapati response seperti pada gambar di bawah ini :

  • Api login user

Untuk pengetesan Api login ini hampir sama dengan Api register yaitu menggunakan method POST ,akan tetapi pada bagian body nya kita rubah menjadi seperti gambar dibawah serta url apinya pun kita ganti menjadi seperti gambar dibawah ,kemudian klik tombol send. Jika login berhasil maka akan didapati response seperti pada gambar di bawah ini :

Sekian penjelasan tentang tutorial PHP membuat REST Api login dan register dengan MySQLi apabila kalian mengalami kesulitan atau error bisa kalian tanyakan pada kolom komentar di bawah.