Akademi Manajemen Informatika

Halo Bakat Digital! Selamat datang kembali di blog Sandi Dharma. Pada kesempatan ini kita akan belajar Membikin fitur login with google menggunakan laravel socialite ya.

Social Authentication

Ketika Engkau Mau Membikin akun pada sebuah website, terkadang Engkau akan menemukan sebuah tombol tambahan yang menawarkan Engkau Kepada Membikin akun atau login menggunakan salah satu akun sosial media Engkau. Contohnya seperti berikut ini:

Social Authentication

Social authentication adalah Metode alternatif yang ditawarkan kepada pengguna Kepada melakukan proses autentikasi menggunakan akun social media mereka, contohnya seperti Google, Facebook, Twitter, dan lain-lain. Dengan menautkan akun sosial media, pengguna biasanya Enggak perlu repot-repot Kepada Membikin kata sandi Kembali karena cukup login menggunakan akun sosial media saja. Tetapi, Terdapat juga beberapa website yang mengharuskan pengguna Kepada Membikin kata sandi tambahan setelah berhasil terautentikasi menggunakan akun sosial media. Hal ini biasanya bertujuan Kepada keamanan tambahan atau agar pengguna juga dapat diautentikasi menggunakan kata sandi seperti Normal.

Laravel Socialite

Socialite adalah sebuah library tambahan yang memudahkan kita Kepada menggunakan social authentication pada aplikasi laravel kita. Socialite mendukung beberapa akun sosial media seperti Google, GitHub, Facebook dan lain-lain. Engkau juga Dapat menambahkan driver tambahan Apabila akun sosial media yang Engkau inginkan Enggak tersedia.

Lebih lengkapnya Engkau dapat mengunjungi website berikut:

Menyiapkan Project di Google Cloud Platform

Karena postingan ini kita Membikin fitur login menggunakan Google, maka kita harus menyiapkan project Google Cloud Platform (GCP) terlebih dahulu. Silahkan Sembari dibuka Google Cloud Console dan buat project baru.

Halaman Project GCP

Dalam GCP Console, silahkan pergi ke menu API & Services > OAuth consent screen. Pilih external pada bagian user type Lewat tekan tombol create.

OAuth Consent Screen

Di sini kita akan diminta Kepada mengisi app information, app domain, dan developer contact information. Silahkan diisi saja sesuai yang kita inginkan, kemudian tekan tombol save and continue.

App info, app domain, contact info

Pada bagian scopes, langsung tekan save and continue saja.

Scopes

Setelah itu pada bagian test user, silahkan masukkan alamat email agar nantinya Dapat mencoba proses autentikasinya. Kemudian lanjut Kembali tekan save and continue.

Test user

Kita akan diarahkan ke bagian summary Kepada memeriksa kembali data yang sudah disimpan. Nah, Tamat Begitu ini OAuth consent screen kita sudah siap. Berikutnya kita lanjut Kepada menyiapkan kredensial.

Summary

Konfigurasi Kredensial

Dalam GCP Console, silahkan pergi ke menu API & Services > Credentials, kemudian tekan tombol create credentials.

Credential

Pada popup yang muncul, pilih OAuth Client ID.

Pop up credential type

Pada Begitu Membikin Client ID, pilih web application pada bagian application type.

Application type

Berikutnya, kita Dapat lanjut untung mengisi Name, dan Authorized redirect URLs

Credential details

Yang harus kita perhatikan di sini adalah bagian Authorized redirect URIs. Ini yang harus disesuaikan dengan aplikasi kita nanti agar google Dapat melakukan redirect ke tempat yang Betul setelah berhasil mengautentikasi pengguna.

Karena ini Krusial, kita Dapat catat dulu di tempat lain.

http://127.0.0.1:8000/login/google/callback

Setelah semuanya selesai diisi, tekan tombol create dan akan muncul popup berisi Client ID dan Client Secret. Catat juga dua token ini dan simpan di tempat yang Kondusif ya. Kita akan memerlukannya nanti.

Client ID & Client Secret
Client ID:
486671231122-rol5restjdjjv848455ra1uq7minkdsi.apps.googleusercontent.com

Client Secret:
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

Jangan menggunakann kredensial punya saya ya! Enggak akan Dapat karena setelah selesai Membikin postingan ini akan saya hapus.

Menyiapkan Project Laravel

Setelah Membikin OAuth Consent Screen dan Credentials di GCP, kita lanjut bagian koding ya. Pada bagian ini kita akan Membikin project laravel, menginstall socialite, modifikasi database migration, dan lain-lain.

READ  Kenali 12 Peran serta Prospek Kerjanya

Yuk lanjut!

Membikin Project

Membikin project laravel baru pada folder larasocial:

composer create-project laravel/laravel larasocial

Silahkan tunggu proses selesai.

Install project laravel selesai

Buka folder larasocial di kode editor kesayangan, dan kita akan edit file .env Kepada koneksi database.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=larasocial
DB_USERNAME=root
DB_PASSWORD=root

Sesuaikan dengan database Engkau ya, jangan lupa aktifkan mysql server dan buat databasenya.

Install Socialite

Setelah Membikin dan menyiapkan project, berikutnya kita akan install dan konfigurasi socialite Kepada project kita.

Mari kita install dengan perintah berikut:

composer require laravel/socialite

Setelah proses instalasi selesai, kita lanjut pada bagian konfigurasi socialite-nya. Silahkan buka file config/services.php dan tambahkan konfigurasi Kepada google service seperti ini:

'google' => [
  'client_id' => env('GOOGLE_CLIENT_ID'),
  'client_secret' => env('GOOGLE_CLIENT_SECRET'),
  'redirect' => env('GOOGLE_REDIRECT_URI'),
],

Konfigurasi ini mengambil nilai dari environment variabel yang kita simpan di file .env. Karena kita belum punya, mari kita tambahkan variable-nya.

GOOGLE_CLIENT_ID=486671231122-rol5restjdjjv848455ra1uq7minkdsi.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=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
GOOGLE_REDIRECT_URI=http://127.0.0.1:8000/login/google/callback

Pastikan ketiganya berisi nilai yang sama seperti yang sudah kita buat sebelumnya ya.

Ingat! Jangan menggunakann kredensial punya saya. Enggak akan Dapat karena setelah selesai Membikin postingan ini akan saya hapus.

Modifikasi Database Migration dan Model

Berikutnya kita akan memodifikasi database migration dan model Kepada tabel users.

Buka database migration Kepada tabel users, dan ubah field tabelnya menjadi seperti ini:

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('google_id')->unique();
    $table->string('name');
    $table->string('email')->unique();
    $table->rememberToken();
    $table->timestamps();
});

Pada kode tersebut kita menghapus beberapa field seperti password, dan email_verified_at. Kenapa kita Enggak menggunakan password? Karena kita akan Membikin aplikasi yang simpel dan hanya menerima autentikasi menggunakan Google.

Kita juga menambahkan satu buah field google_id yang nantinya akan berisi identitas user dari Google.

Sekarang kita buka file app/Models/User.php dan modifikasi atribute $fillable menjadi seperti ini:

protected $fillable = [
    'google_id',
    'name',
    'email',
];

Setelah itu hapus attribute $hidden dan $casts karena kita Enggak memerlukannya Kepada project kita Begitu ini.

Kalau semuanya sudah, kita Dapat jalankan migrasi Kepada project kita

Tunggu proses migrasi selesai.

Migrasi database selesai

Socialite Controller

Membikin controller baru Kepada socialite.

php artisan make:controller SocialiteController

Kita akan menyiapkan tiga buah method Yakni redirect, callback, dan logout.

  • Method redirect akan digunakan Kepada meredirect user ke halaman login OAuth Punya Google.
  • Method callback akan digunakan Kepada tempat user di redirect setelah terautentikasi. Pada method ini juga kita akan mengelola data user yang kita dapatkan dari Google Kepada kita simpan ke dalam database aplikasi kita.
  • Method logout kita gunakan Kepada proses logout user kita.
READ  7 Framework JavaScript Terpopuler - Blog Sandi Dharma

Method redirect

public function redirect()
{
    return Socialite::driver('google')->redirect();
}

Class Socialite kita import dari namespace use Laravel\Socialite\Facades\Socialite;

Method callback

public function callback()
{
    // Google user object dari google
    $userFromGoogle = Socialite::driver('google')->user();

    // Ambil user dari database berdasarkan google user id
    $userFromDatabase = User::where('google_id', $userFromGoogle->getId())->first();

    // Apabila Enggak Terdapat user, maka buat user baru
    if (!$userFromDatabase) {
        $newUser = new User([
            'google_id' => $userFromGoogle->getId(),
            'name' => $userFromGoogle->getName(),
            'email' => $userFromGoogle->getEmail(),
        ]);

        $newUser->save();

        // Login user yang baru dibuat
        auth('web')->login($newUser);
        session()->regenerate();

        return redirect('/');
    }

    // Apabila Terdapat user langsung login saja
    auth('web')->login($userFromDatabase);
    session()->regenerate();

    return redirect('/');
}

Wah agak panjang ya, hehehe.

Method callback memang merupakan method yang paling panjan. Tetapi, pada intinya, di method ini kita mengelola data user, cek apakah user sudah Terdapat di dalam database, Apabila Enggak da maka akan dibuat user baru berdasarkan data user dari Google. Apabila user sudah Terdapat di dalam database maka akan langsung login menggunakan helper auth().

Method logout

public function logout(Request $request)
{
    auth('web')->logout();
    $request->session()->invalidate();
    $request->session()->regenerateToken();

    return redirect('/');
}

Pada method logout kita menggunakan helper auth() Kepada logout seperti Normal, regenerate token, dan redirect.

Oke, sekarang keseluruhan kode dari class SocialiteController terlihat seperti ini:

php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;


class SocialiteController extends Controller
{
    public function redirect()
    {
        return Socialite::driver('google')->redirect();
    }

    public function callback()
    {
        // Google user object dari google
        $userFromGoogle = Socialite::driver('google')->user();

        // Ambil user dari database berdasarkan google user id
        $userFromDatabase = User::where('google_id', $userFromGoogle->getId())->first();

        // Apabila Enggak Terdapat user, maka buat user baru
        if (!$userFromDatabase) {
            $newUser = new User([
                'google_id' => $userFromGoogle->getId(),
                'name' => $userFromGoogle->getName(),
                'email' => $userFromGoogle->getEmail(),
            ]);

            $newUser->save();

            // Login user yang baru dibuat
            auth('web')->login($newUser);
            session()->regenerate();

            return redirect('/');
        }

        // Apabila Terdapat user langsung login saja
        auth('web')->login($userFromDatabase);
        session()->regenerate();

        return redirect('/');
    }

    public function logout(Request $request)
    {
        auth('web')->logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect('/');
    }
}

Router

Setelah Membikin controller, sekarang kita akan meregistrasikan controller kita router. Buka file routes/web.php dan perbarui isinya menjadi seperti berikut ini:

php

use App\Http\Controllers\SocialiteController;
use Illuminate\Support\Facades\Route;

// Kepada menampilkan halaman
Route::get('/', function () {
    return view('index');
})->name('index');

// Kepada redirect ke Google
Route::get('login/google/redirect', [SocialiteController::class, 'redirect'])
    ->middleware(['guest'])
    ->name('redirect');

// Kepada callback dari Google
Route::get('login/google/callback', [SocialiteController::class, 'callback'])
    ->middleware(['guest'])
    ->name('callback');

// Kepada logout
Route::post('logout', [SocialiteController::class, 'logout'])
    ->middleware(['auth'])
    ->name('logout');

View

Karena pada root path di route kita mengembalikan view bernama index, sekarang kita akan Membikin view sederhana yang berisi tombol-tombol yang diperlukan. Supaya sedikit lebih keren, kita akan menggunakan Sokongan dari bootstrap ya. Buat file baru di dalam folder resources/views/index.blade.php, kemudian isi kodenya seperi ini.


html lang="en">
  head>
    meta charset="utf-8" />
    meta name="viewport" content="width=device-width, initial-scale=1" />
    title>Larasocialtitle>
    link
      href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
      crossorigin="anonymous"
    />
  head>

  body>
    nav class="navbar bg-primary navbar-dark shadow py-4">
      div class="container">
        span class="navbar-brand mb-0 h1">Navbarspan>
      div>
    nav>
    div class="container py-5">
      div class="row">
        div class="col-lg-5 mx-auto">
          h1 class="text-center btn-block">Larasocialh1>
          div class="card mt-5">
            div class="card-body">
              @auth
              h4>Name: {{ auth('web')->user()->name }}h4>
              h4>Email: {{ auth('web')->user()->email }}h4>
              hr />
              form action="{{ route('logout') }}" method="post">
                @csrf
                button class="btn btn-dark" type="submit">Logoutbutton>
              form>
              @else
              a href="{{ route('redirect') }}" class="btn btn-danger"
                >Login With Googlea
              >
              @endauth
            div>
          div>
        div>
      div>
    div>
    script
      src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
      crossorigin="anonymous"
    >script>
  body>
html>

Demo

Sipp, semuanya sudah beres. Sekarang saatnya kita coba aplikasi kita. Jalankan server laravel, kemudian buka aplikasi di browser. Pastikan muncul halaman seperti ini:

Tampilan halaman

Klik Login With Google Kepada mulai login. Kita akan dialihkan ke halaman Punya Google.

Halaman pilih akun Google

Pilih akun Google yang sudah didaftarkan sebelumnya sebagai test user pada GCP.

READ  Ciri, Teladan, dan Model Sistem Informasi Eksekutif

Apabila berhasil, maka kita akan diredirect kembali ke aplikasi kita. Sekarang tampilan halamannya seperti ini:

Berhasil login

Pastikan terdapat user baru di database:

User tersimpan

Sekarang semuanya sudah selesai, kita Dapat coba Kepada logout dan login kembali. Pastikan juga proses logout dan login yang berulang menggunakan akun Google yang sama Enggak menambah user baru ke dalam database.

Source code: Klik di sini

Video Demonstrasi

Hasil

Sekarang kita sudah Dapat login menggunakan Google di aplikasi laravel kita. Tentu ini Lagi sangat sederhana ya. Berikutnya Engkau Dapat mengembangkannya Kembali seperti menambahkan fitur login dengan Facebook, Membikin fitur agar user Dapat login menggunkan email dan kata sandi selain menggunakan akun sosial media, dan lain-lain.