sso-frappe / laravel
Laravel Socialite provider for Frappe SSO — 'Login with Frappe' for Laravel apps.
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.0
- illuminate/contracts: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- laravel/socialite: ^5.0
Requires (Dev)
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0|^10.0
- phpunit/phpunit: ^11.0|^12.0
README
Laravel Socialite provider untuk "Login with Frappe".
Menambahkan OAuth2 / OpenID Connect login Frappe ke aplikasi Laravel menggunakan Laravel Socialite.
Instalasi
composer require sso-frappe/laravel
Konfigurasi
1. Buat OAuth Client di Frappe
Masuk ke situs Frappe:
Frappe → Settings → OAuth Client (OAuth Provider =
Frappe)
Catat client_id, client_secret, dan isi Redirect URI dengan callback di aplikasi kamu (harus sama persis termasuk protocol).
2. Isi environment variables
FRAPPE_SSO_BASE_URL=https://erp.example.com FRAPPE_SSO_CLIENT_ID=your-client-id FRAPPE_SSO_CLIENT_SECRET=your-client-secret FRAPPE_SSO_REDIRECT_URI=https://app.example.com/auth/frappe/callback
3. ServiceProvider (auto-discovery)
Laravel 11+: auto-discovery otomatis melalui extra.laravel.providers. Tidak perlu konfigurasi tambahan.
Laravel 10: tambahkan secara manual ke bootstrap/providers.php:
SsoFrappe\Laravel\FrappeServiceProvider::class,
4. Publish config (opsional)
php artisan vendor:publish --tag=sso-frappe-config
Usage
Route
// routes/web.php use Laravel\Socialite\Facades\Socialite; Route::get('/auth/frappe', function () { return Socialite::driver('frappe')->redirect(); })->name('frappe.login'); Route::get('/auth/frappe/callback', function () { $frappeUser = Socialite::driver('frappe')->user(); // Cocokkan user lokal berdasarkan subject ID (stable identifier) $identity = \App\Models\UserIdentity::query() ->where('provider', 'frappe') ->where('provider_subject', $frappeUser->getId()) ->first(); // ... lanjut match/create user dan Auth::login() })->name('frappe.callback');
Contoh lengkap dengan skema users + user_identities (match subject ID dulu, fallback email) lihat dokumentasi sso-frappe.
Object yang dikembalikan oleh Socialite
| Property | Sumber userinfo | Keterangan |
|---|---|---|
getId() |
sub |
Stable subject ID — pakai sebagai kunci identitas |
getEmail() |
email |
|
getName() |
name |
Nama lengkap |
getNickname() |
username |
Username Frappe |
getAvatar() |
user_image |
URL avatar |
frappe_roles |
roles |
Array roles |
getRaw() |
— | Array userinfo mentah |
Fitur yang ditangani otomatis
client_secret_post— Socialite default mengirim kredensial di POST body, sesuai kebutuhan Frappe.- PKCE S256 — aktif secara default. Nonaktif via
use_pkce => falsedi config. - Endpoint eksplisit — tanpa dependency OIDC discovery. Menghindari masalah issuer http/https.
- Profil dari userinfo endpoint — bukan id_token. Konsisten dengan adapter JavaScript
sso-frappe.
Testing
composer install vendor/bin/phpunit
Lisensi
MIT — lihat LICENSE.