serenus / serenus-laravel-modular-auth
Modul Otentikasi dan Otorisasi yang dapat digunakan kembali untuk Laravel.
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:laravel-module
pkg:composer/serenus/serenus-laravel-modular-auth
Requires
- php: >=8.2
- illuminate/support: ^12.0
- laravel/sanctum: ^4.0
- laravel/socialite: ^5.0
- spatie/laravel-permission: ^6.0
This package is auto-updated.
Last update: 2025-10-22 08:07:31 UTC
README
Modul Otentikasi dan Otorisasi yang dapat digunakan kembali untuk Laravel. Modul ini menyediakan fungsionalitas lengkap untuk manajemen pengguna, peran, izin, serta integrasi Socialite (Google Login) dalam arsitektur modular.
Daftar Isi
1. Pendahuluan
serenus-laravel-modular-auth
adalah modul Laravel yang dirancang untuk menyediakan solusi otentikasi dan otorisasi yang komprehensif dan dapat digunakan kembali. Modul ini mengintegrasikan paket-paket populer seperti Laravel Sanctum untuk otentikasi API, Spatie Laravel Permission untuk manajemen peran dan izin, serta Laravel Socialite untuk otentikasi pihak ketiga (saat ini Google).
2. Fitur
- Registrasi Pengguna: Pendaftaran pengguna baru dengan validasi.
- Login Pengguna: Otentikasi pengguna dan pembuatan token Sanctum.
- Lupa Kata Sandi: Alur reset kata sandi melalui email.
- Verifikasi Email: Memastikan pengguna memverifikasi alamat email mereka.
- Google Socialite: Integrasi login menggunakan akun Google.
- Manajemen Peran & Izin: Mengelola peran dan izin pengguna menggunakan Spatie Laravel Permission.
- Manajemen Pengguna (CRUD): Endpoint API untuk membuat, membaca, memperbarui, dan menghapus pengguna.
- Gate Administrator: Mekanisme untuk memberikan akses penuh kepada pengguna dengan peran 'administrator' ke semua Gate.
- Struktur Modular: Dirancang sebagai modul yang dapat dipasang dan digunakan kembali di berbagai proyek Laravel.
3. Instalasi
-
Tambahkan Modul ke
composer.json
Proyek Utama Anda: Jika Anda mengunggah modul ini ke Packagist, Anda dapat menambahkannya sebagai dependensi biasa. Jika tidak, Anda mungkin perlu menambahkannya sebagai repositori Path atau VCS dicomposer.json
proyek utama Anda.// composer.json proyek utama Anda { "repositories": [ { "type": "path", "url": "./modules/serenus-laravel-modular-auth" // Sesuaikan path jika modul berada di lokasi lain } ], "require": { "serenus/serenus-laravel-modular-auth": "@dev" // Atau versi stabil jika sudah ada } }
-
Jalankan
composer update
:composer update
-
Publikasikan Migrasi dan Konfigurasi (jika diperlukan): Modul ini bergantung pada
laravel/sanctum
,spatie/laravel-permission
, danlaravel/socialite
. Pastikan Anda telah mempublikasikan dan menjalankan migrasi untuk paket-paket ini di proyek utama Anda.- Sanctum:
php artisan vendor:publish --tag="sanctum-migrations"
- Spatie Laravel Permission:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="permission-migrations" php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="permission-config"
- Socialite:
php artisan vendor:publish --provider="Laravel\Socialite\SocialiteServiceProvider"
- Sanctum:
-
Jalankan Migrasi:
php artisan migrate
4. Konfigurasi
4.1. Konfigurasi .env
Pastikan Anda memiliki konfigurasi berikut di file .env
proyek utama Anda:
# Sanctum SANCTUM_STATEFUL_DOMAINS=localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1 # Socialite Google GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret GOOGLE_REDIRECT_URI=http://localhost:8000/api/auth/google/callback # Sesuaikan dengan URL callback API Anda GOOGLE_REDIRECT_URI_WEB=http://localhost:8000/auth/google/callback # Sesuaikan dengan URL callback Web Anda # Client Secret (untuk rute publik yang dilindungi) CLIENT_SECRET=your-secure-client-secret # Gunakan string acak yang kuat
4.2. Konfigurasi config/auth.php
Pastikan guard sanctum
dan provider users
dikonfigurasi dengan benar.
4.3. Konfigurasi config/services.php
Tambahkan konfigurasi untuk Google Socialite:
// config/services.php 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT_URI'), ],
4.4. Middleware verify.client
Modul ini menggunakan middleware verify.client
untuk melindungi rute publik tertentu. Anda perlu mendaftarkan middleware ini di app/Http/Kernel.php
proyek utama Anda:
// app/Http/Kernel.php protected $middlewareAliases = [ // ... 'verify.client' => \App\Http\Middleware\VerifyClientSecret::class, // Buat middleware ini di proyek utama Anda ];
Contoh implementasi App\Http\Middleware\VerifyClientSecret
:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class VerifyClientSecret { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { $clientSecret = $request->header('X-Client-Secret'); // Atau dari body/query parameter if (!$clientSecret || $clientSecret !== env('CLIENT_SECRET')) { return response()->json(['message' => 'Unauthorized: Invalid Client Secret'], 401); } return $next($request); } }
5. Rute API
Semua rute API di-prefix dengan /api
oleh AuthServiceProvider
.
5.1. Rute Publik (Dilindungi Client Secret)
Middleware: verify.client
(membutuhkan header X-Client-Secret
yang cocok dengan CLIENT_SECRET
di .env
)
-
POST /api/register
- Controller:
RegisterController@register
- Deskripsi: Mendaftarkan pengguna baru.
- Parameter Body:
name
(string, required)email
(string, required, unique, email)password
(string, required, min:8, confirmed)password_confirmation
(string, required)
- Respons: Token Sanctum dan detail pengguna.
- Controller:
-
POST /api/login
- Controller:
LoginController@login
- Deskripsi: Mengotentikasi pengguna dan mengembalikan token Sanctum.
- Parameter Body:
email
(string, required, email)password
(string, required)
- Respons: Token Sanctum dan detail pengguna.
- Controller:
-
POST /api/forgot-password
- Controller:
ForgotPasswordController@sendResetLinkEmail
- Deskripsi: Mengirim tautan reset kata sandi ke email pengguna.
- Parameter Body:
email
(string, required, email)
- Respons: Pesan sukses.
- Controller:
-
POST /api/reset-password
- Controller:
ForgotPasswordController@reset
- Deskripsi: Mereset kata sandi pengguna menggunakan token reset.
- Parameter Body:
token
(string, required)email
(string, required, email)password
(string, required, min:8, confirmed)password_confirmation
(string, required)
- Respons: Pesan sukses.
- Controller:
5.2. Socialite (Google Login) API
Prefix: /api/auth/google
-
GET /api/auth/google/redirect
- Controller:
SocialiteController@redirectToProvider
- Deskripsi: Mengarahkan pengguna ke halaman login Google.
- Respons: Redirect ke Google.
- Controller:
-
GET /api/auth/google/callback
- Controller:
SocialiteController@handleProviderCallback
- Deskripsi: Callback dari Google setelah otentikasi. Membuat/login pengguna dan mengembalikan token Sanctum.
- Respons: Token Sanctum dan detail pengguna.
- Controller:
5.3. Rute Terproteksi (Membutuhkan Sanctum Token & Verifikasi Email)
Middleware: auth:api
, verified
-
GET /api/user
- Controller:
UserController@show
- Deskripsi: Mendapatkan detail pengguna yang sedang login.
- Respons: Detail pengguna.
- Controller:
-
POST /api/logout
- Controller:
LoginController@logout
- Deskripsi: Menghapus token Sanctum pengguna yang sedang login.
- Respons: Pesan sukses.
- Controller:
5.4. Manajemen Roles
Middleware: auth:api
, verified
, permission:manage-roles
Prefix: /api/roles
-
GET /api/roles
- Controller:
RoleController@index
- Deskripsi: Mendapatkan daftar semua peran.
- Respons: Daftar peran.
- Controller:
-
POST /api/roles
- Controller:
RoleController@store
- Deskripsi: Membuat peran baru.
- Parameter Body:
name
(string, required, unique)
- Respons: Peran yang baru dibuat.
- Controller:
-
GET /api/roles/{role}
- Controller:
RoleController@show
- Deskripsi: Mendapatkan detail peran tertentu.
- Respons: Detail peran.
- Controller:
-
PUT /api/roles/{role}
- Controller:
RoleController@update
- Deskripsi: Memperbarui peran tertentu.
- Parameter Body:
name
(string, required, unique)
- Respons: Peran yang diperbarui.
- Controller:
-
DELETE /api/roles/{role}
- Controller:
RoleController@destroy
- Deskripsi: Menghapus peran tertentu.
- Respons: Pesan sukses.
- Controller:
-
POST /api/roles/{role}/permissions
- Controller:
RoleController@assignPermission
- Deskripsi: Menetapkan izin ke peran.
- Parameter Body:
permissions
(array, required): Array nama izin.
- Respons: Peran dengan izin yang diperbarui.
- Controller:
5.5. Manajemen Permissions
Middleware: auth:api
, verified
, permission:manage-permissions
-
GET /api/permissions
- Controller:
PermissionController@index
- Deskripsi: Mendapatkan daftar semua izin.
- Respons: Daftar izin.
- Controller:
-
POST /api/permissions/sync/{role}
- Controller:
PermissionController@syncPermissionsToRole
- Deskripsi: Menyinkronkan izin ke peran tertentu.
- Parameter Body:
permissions
(array, required): Array nama izin.
- Respons: Peran dengan izin yang disinkronkan.
- Controller:
5.6. Manajemen Pengguna (CRUD)
Middleware: auth:api
, verified
Catatan: Setiap operasi CRUD pengguna memiliki izin spesifik yang diperlukan.
-
GET /api/users
- Controller:
UserManagerController@index
- Middleware:
permission:manage-users
- Deskripsi: Mendapatkan daftar semua pengguna.
- Respons: Daftar pengguna.
- Controller:
-
GET /api/users/{user}
- Controller:
UserManagerController@show
- Middleware:
permission:manage-users
- Deskripsi: Mendapatkan detail pengguna tertentu.
- Respons: Detail pengguna.
- Controller:
-
POST /api/users
- Controller:
UserManagerController@store
- Middleware:
permission:create-users
- Deskripsi: Membuat pengguna baru.
- Parameter Body:
name
(string, required)email
(string, required, unique, email)password
(string, required, min:8, confirmed)password_confirmation
(string, required)roles
(array, optional): Array nama peran untuk ditetapkan.
- Respons: Pengguna yang baru dibuat.
- Controller:
-
PUT /api/users/{user}
- Controller:
UserManagerController@update
- Middleware:
permission:edit-users
- Deskripsi: Memperbarui detail pengguna tertentu.
- Parameter Body:
name
(string, optional)email
(string, optional, unique, email)password
(string, optional, min:8, confirmed)password_confirmation
(string, optional)roles
(array, optional): Array nama peran untuk ditetapkan/disinkronkan.
- Respons: Pengguna yang diperbarui.
- Controller:
-
DELETE /api/users/{user}
- Controller:
UserManagerController@destroy
- Middleware:
permission:delete-users
- Deskripsi: Menghapus pengguna tertentu.
- Respons: Pesan sukses.
- Controller:
6. Rute Web
6.1. Socialite (Google Login) Web
-
GET /auth/google/redirect
- Controller:
AuthController@redirectToGoogle
- Nama Rute:
google.redirect
- Deskripsi: Mengarahkan pengguna ke halaman login Google untuk otentikasi berbasis web.
- Respons: Redirect ke Google.
- Controller:
-
GET /auth/google/callback
- Controller:
AuthController@handleGoogleCallback
- Nama Rute:
google.callback
- Deskripsi: Callback dari Google setelah otentikasi web. Membuat/login pengguna dan mengarahkan kembali ke aplikasi.
- Respons: Redirect ke halaman yang ditentukan setelah login.
- Controller:
6.2. Logout Web
POST /logout
- Controller:
AuthController@logout
- Middleware:
auth
- Nama Rute:
logout
- Deskripsi: Mengeluarkan pengguna dari sesi web.
- Respons: Redirect ke halaman login atau beranda.
- Controller:
7. Gate Administrator
Modul ini mengimplementasikan Gate before
di AuthServiceProvider
yang secara otomatis memberikan akses true
untuk setiap kemampuan (ability) kepada pengguna yang memiliki peran administrator
.
Gate::before(function (User $user, string $ability) { if ($user->hasRole('administrator')) { return true; } });
Ini berarti setiap pengguna dengan peran administrator
akan melewati semua pengecekan Gate/Permission di aplikasi Anda. Pastikan Anda memiliki peran 'administrator' yang dibuat dan ditetapkan kepada pengguna yang sesuai.
8. Lisensi
Modul ini dilisensikan di bawah Lisensi MIT. Lihat file LICENSE
untuk detail lebih lanjut.