Modern web apps demand two things:
✅ Lightning-fast user experience
✅ Rock-solid authentication
Laravel Turbo delivers the speed. Auth0 delivers the security. Together, they let you build apps that feel like SPAs but behave like traditional Laravel — with enterprise-grade identity baked in.
In this guide, we’ll walk through how to:
- Set up Laravel Turbo for SPA-like UX
- Integrate Auth0 using their PHP SDK
- Handle login, callback, and user sessions
- Use Turbo Streams for dynamic UI updates
- Protect routes with middleware
Let’s get started.
🧠 What Is Laravel Turbo?
Laravel Turbo is a wrapper around Hotwired Turbo, originally built for Rails. It gives Laravel apps:
- Turbo Drive: SPA-like navigation without full reloads
- Turbo Streams: Real-time DOM updates via Blade
- Turbo Frames: Partial page rendering
It’s perfect for apps that want speed without the complexity of Vue or React.
🔐 What Is Auth0?
Auth0 is a flexible identity platform that handles:
- Authentication (email/password, social, enterprise)
- Authorization (roles, scopes)
- MFA, SSO, and OAuth2
- Secure token management
The Auth0 PHP SDK lets you integrate these features into Laravel with minimal setup.
🧱 Step 1: Install Laravel Turbo
Install the package:
composer require hotwired/turbo-laravel
Publish assets:
php artisan vendor:publish --tag=turbo-assets
Include Turbo in your layout:
<!-- resources/views/layouts/app.blade.php -->
<script src="{{ asset('vendor/turbo/turbo.js') }}"></script>
Now your app supports Turbo Drive and Turbo Streams.
🔧 Step 2: Install Auth0 PHP SDK
Install the SDK:
composer require auth0/auth0-php
Add your credentials to .env:
AUTH0_DOMAIN=your-domain.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
AUTH0_REDIRECT_URI=https://your-app.com/callback
Create a singleton binding:
use Auth0\SDK\Auth0;
app()->singleton(Auth0::class, function () {
return new Auth0([
'domain' => env('AUTH0_DOMAIN'),
'clientId' => env('AUTH0_CLIENT_ID'),
'clientSecret' => env('AUTH0_CLIENT_SECRET'),
'redirectUri' => env('AUTH0_REDIRECT_URI'),
'cookieSecret' => env('APP_KEY'),
]);
});
This makes Auth0 available via dependency injection.
🔁 Step 3: Create Login & Callback Flow
Create an AuthController:
use Auth0\SDK\Auth0;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function login(Auth0 $auth0)
{
return redirect()->away($auth0->login());
}
public function callback(Auth0 $auth0)
{
$auth0->exchange(); // Handles token exchange
$user = $auth0->getUser();
// Create or retrieve Laravel user
$laravelUser = User::firstOrCreate([
'email' => $user['email'],
], [
'name' => $user['name'] ?? 'Guest',
]);
Auth::login($laravelUser);
return redirect()->intended('/');
}
}
Add routes:
Route::get('/login', [AuthController::class, 'login']);
Route::get('/callback', [AuthController::class, 'callback']);
⚡ Step 4: Turbo + Auth0 UX Flow
Turbo Drive makes navigation seamless. You can wrap login links like this:
<a href="/login" data-turbo-action="replace">Login with Auth0</a>
After login, use Turbo Streams to update the UI:
@turboStream(['target' => 'user-panel', 'action' => 'replace'])
<div id="user-panel">
Welcome, {{ Auth::user()->name }}
</div>
@endTurboStream
This replaces the #user-panel div without a full page reload.
🧩 Step 5: Protect Routes with Middleware
Create a middleware to ensure users are authenticated:
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect('/login');
}
return $next($request);
}
Register it in Kernel.php and apply it to protected routes:
Route::middleware('auth.custom')->group(function () {
Route::get('/dashboard', fn () => view('dashboard'));
});
🛡️ Security Best Practices
- Always validate tokens server-side
- Use HTTPS for all redirects and callbacks
- Enable MFA in Auth0 dashboard
- Rotate secrets regularly
- Log out users securely using
$auth0->logout()
🧭 Final Thoughts
Laravel Turbo gives you speed. Auth0 gives you security. Together, they let you build apps that:
- Feel like SPAs
- Are easy to maintain
- Scale securely across users and roles
Whether you’re building a SaaS dashboard, internal tool, or public-facing app — this combo is a powerful foundation.
Fast UX. Secure Auth. Laravel just leveled up.
