From 5988c6d064a1aadbc491c86b43e78a464e9b6e16d414f653e34dd8132dd549bb Mon Sep 17 00:00:00 2001 From: Claude Dev Date: Mon, 9 Feb 2026 02:55:48 -0500 Subject: [PATCH] Fix redirect loop on session expiry and add missing nav links - Add redirectGuestsTo in bootstrap/app.php so unauthenticated users always redirect to the full account login URL instead of a relative /login that would 404 on the admin subdomain or loop - Create HandleInertiaRequests middleware to share auth.user, flash messages, and domain config to all Vue pages (was entirely missing) - Add Profile nav link in AppLayout, "Customer View" link in AdminLayout - Point logout to account subdomain where Fortify routes live - Link AuthLayout logo back to marketing site - Fix Marketing/Home links to use full account subdomain URLs - Update RoleBasedAccessTest to match new redirect URL Co-Authored-By: Claude Opus 4.6 --- .../Http/Middleware/HandleInertiaRequests.php | 30 +++++++++++++++++++ website/bootstrap/app.php | 4 ++- website/resources/js/Layouts/AdminLayout.vue | 16 ++++++++-- website/resources/js/Layouts/AppLayout.vue | 12 +++++++- website/resources/js/Layouts/AuthLayout.vue | 8 ++++- website/resources/js/Pages/Marketing/Home.vue | 12 ++++++-- .../Feature/Auth/RoleBasedAccessTest.php | 2 +- 7 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 website/app/Http/Middleware/HandleInertiaRequests.php diff --git a/website/app/Http/Middleware/HandleInertiaRequests.php b/website/app/Http/Middleware/HandleInertiaRequests.php new file mode 100644 index 0000000..9e3b7c8 --- /dev/null +++ b/website/app/Http/Middleware/HandleInertiaRequests.php @@ -0,0 +1,30 @@ + */ + public function share(Request $request): array + { + return array_merge(parent::share($request), [ + 'auth' => fn () => [ + 'user' => $request->user() ? $request->user()->only('id', 'name', 'email', 'status') : null, + ], + 'flash' => fn () => [ + 'success' => $request->session()->get('success'), + 'error' => $request->session()->get('error'), + ], + 'domains' => fn () => [ + 'marketing' => config('app.domains.marketing'), + 'account' => config('app.domains.account'), + 'admin' => config('app.domains.admin'), + ], + ]); + } +} diff --git a/website/bootstrap/app.php b/website/bootstrap/app.php index d711574..09c4e38 100644 --- a/website/bootstrap/app.php +++ b/website/bootstrap/app.php @@ -29,9 +29,11 @@ return Application::configure(basePath: dirname(__DIR__)) $middleware->trustProxies(at: '*'); $middleware->web(append: [ - \Inertia\Middleware::class, + \App\Http\Middleware\HandleInertiaRequests::class, ]); + $middleware->redirectGuestsTo(fn () => 'https://'.config('app.domains.account').'/login'); + $middleware->alias([ 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, diff --git a/website/resources/js/Layouts/AdminLayout.vue b/website/resources/js/Layouts/AdminLayout.vue index df08490..147641c 100644 --- a/website/resources/js/Layouts/AdminLayout.vue +++ b/website/resources/js/Layouts/AdminLayout.vue @@ -1,8 +1,12 @@