Berikut adalah tutorial lengkap dan detail untuk membuat fitur registrasi dan login menggunakan akun Google di Laravel (dengan MySQL).

Kita akan menggunakan paket Laravel Socialite, yang merupakan solusi resmi dari Laravel untuk OAuth login.

1.  Install Laravel

composer create-project laravel/laravel social-login-app 
cd social-login-app

 

2. Konfigurasi Database

Edit .env:

DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=

Menjadi

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

Buat database-nya di MySQL:

CREATE DATABASE social_login;

 

3. Install Laravel UI (opsional jika ingin UI auth dengan Bootstrap)

composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev

Di sini kita pakai laravel UI, karena kita sangat familiar dengan bootstrap agar kita lebih mudah. Jika pakai yang lain seperti laravel jetstream, bisa menyesuaikan. 

4. Install Laravel Socialite

composer require laravel/socialite

Laravel Socialite adalah package yang dapat kita gunakan untuk mengintegrasikan Oauth ke dalam aplikasi yang kita bangun menggunakan laravel.

Setelah kita tambahkan laravel socialite, selanjutnya buka file konfigurasi bootstrap/providers.php, lalu tambahkan laravel socialite.

<?php

return [
    App\Providers\AppServiceProvider::class,
    Laravel\Socialite\SocialiteServiceProvider::class,
];

 

5. Konfigurasi Socialite

Edit config/services.php dan tambahkan:

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

Lalu di file .env, tambahkan:

GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URL=http://localhost:8000/oauth/google/callback

Untuk mendapatkan Google client ID, dan google client secret, pertama kita buka dulu google console auth di link berikut:

https://console.cloud.google.com/apis/credentials

Kemudian, Create credential dan pilih OAuth client ID seperti berikut:

Create New Credential

Jika google request untuk melakukan project configuration, silahkan klik dan isi seperti berikut, lalu klik create:

Project Config

Setelah itu, akan muncul halaman berikut, klik Create OAuth client di pojok kanan:

New auth

Lalu isi name dan Authorized redirect URIs. Dalam project ini karena kita jalankan di localhost, kita set URL nya seperti berikut:

Create Oauth client ID

Setelah itu, akan muncul Pop Up untuk Client ID dan Client Secret seperti berikut:

Client ID dan Client Secret

Copy code tersebut dan masukkan ke .env sebelumnya. 

 

6. Migration dan Model

Edit file migration create_users_table.php:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique()->nullable();
        $table->string('password')->nullable();
        $table->rememberToken()->nullable();
        $table->string('provider')->nullable();
        $table->string('provider_id')->nullable();
        $table->timestamps();
    });
}

Lalu jalankan migrasi:

php artisan migrate

 

7. Update Model User.php

Tambahkan berikut:

protected $fillable = [
    'name',
    'email',
    'password',
    'provider',
    'provider_id',
];

 

8. Buat Controller Auth

php artisan make:controller SocialAuthController

Isi SocialAuthController.php:

<?php

namespace App\Http\Controllers;

use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Facades\Auth;

class SocialAuthController extends Controller
{
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }

    public function handleProviderCallback($provider)
    {
        $socialUser = Socialite::driver($provider)->stateless()->user();

        $user = User::updateOrCreate(
            [
                'provider' => $provider,
                'provider_id' => $socialUser->getId(),
            ],
            [
                'name' => $socialUser->getName() ?? $socialUser->getNickname(),
                'email' => $socialUser->getEmail(),
            ]
        );

        Auth::login($user, true);

        return redirect('/home');
    }
}

 

9. Buat Route Social Login

Edit routes/web.php:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SocialAuthController;
use Illuminate\Support\Facades\Auth;

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('/auth/{provider}', [SocialAuthController::class, 'redirectToProvider']);
Route::get('/oauth/{provider}/callback', [SocialAuthController::class, 'handleProviderCallback']);

 

10. Tambahkan Tombol Login Sosial di Halaman Login

Edit resources/views/auth/login.blade.php:

<a href="{{ url('/auth/google') }}" class="btn btn-danger btn-block">Login with Google</a>

 

11. Jalankan Aplikasi

Sebelum menjalankan aplikasi, jika terdapat error berikut:

Call to undefined method App\Http\Controllers\Auth\LoginController::middleware(),

buka Controller.php di folder App/Http/Controllers/, modifikasi menjadi berikut:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

Karena laravel 11+ sudah tidak support middleware. Jalankan server dengan perintah berikut: 

php artisan serve

Buka di browser:

http://localhost:8000/login

Klik "Login with Google" atau "Login with Facebook", dan kamu akan otomatis masuk/terdaftar jika belum ada.

Jika berhasil, akan menghasilkan seperti berikut:
Login google

Setelah login google diklik, akan redirect ke halaman berikut:

Login Google

Login google pop up

Dan login berhasil!. Cek di database user, apakah datanya sudah bertambah?

Login success

Selamat mencoba!!! semoga berhasil