1. Go to this page and download the library: Download little-green-man/earhart library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Laravel\Socialite\Facades\Socialite;
Route::get('/auth/callback', function(Request $request){
$propelUser = Socialite::driver('propelauth')->user();
$rawUser = $propelUser->getRaw();
$user = User::updateOrCreate([
'propel_id' => $propelUser->id,
], [
'name' => $rawUser['first_name'] . ' ' . $rawUser['last_name'],
'email' => $propelUser->email,
'propel_access_token' => $propelUser->token,
'propel_refresh_token' => $propelUser->refreshToken,
'avatar' => $rawUser['picture_url'],
'data' => json_encode($rawUser),
'email_verified_at' => $rawUser['email_confirmed'] ? now() : null,
]);
Auth::login($user);
// you might also want to update and sync `$user`'s organisations with `$rawUser['org_id_to_org_info']`;
return redirect('/dashboard');
})->name('auth.callback');
Route::get('/auth/logout', function(Request $request){
// IMPORTANT: Fetch the refresh token BEFORE calling Auth::logout()
// Calling Auth::logout() first will clear the authenticated user, resulting in:
// "Attempt to read property 'propel_refresh_token' on null"
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post(config('services.propelauth.auth_url') . '/api/backend/v1/logout', [
'refresh_token' => Auth::user()->propel_refresh_token,
]);
if ($response->failed()) {
Log::debug('Failed to log out from PropelAuth', ['response' => $response->body()]);
}
Auth::logout();
return redirect('/');
})->name('auth.logout');
use Illuminate\Support\Facades\Event;
use SocialiteProviders\Manager\SocialiteWasCalled;
Event::listen(function (SocialiteWasCalled $event) {
$event->extendSocialite('propelauth', \SocialiteProviders\PropelAuth\Provider::class);
});
namespace App\Listeners;
use App\Models\Organisation;
use LittleGreenMan\Earhart\Events\PropelAuth\OrgCreated;
class PropelAuthOrgCreatedListener
{
public function handle(OrgCreated $event): void
{
Organisation::create([
'name' => $event->name,
'propel_id' => $event->org_id,
]);
}
}
$orgs = app('earhart')->getOrganisations();
$org = app('earhart')->getOrganisation('org_uuid');
// Returns array of UserData objects
$users = app('earhart')->getUsersInOrganisation('org_uuid');
// For pagination control, use the service directly:
$result = app('earhart')->organisations()->getOrganisationUsers('org_uuid', pageSize: 50);
// $result is PaginatedResult with totalItems, hasMoreResults, etc.