|
6 | 6 | use Illuminate\Auth\Events\Registered;
|
7 | 7 | use Illuminate\Foundation\Http\FormRequest;
|
8 | 8 | use Illuminate\Support\Facades\Auth;
|
| 9 | +use Illuminate\Support\Facades\URL; |
| 10 | +use Inertia\Inertia; |
9 | 11 | use Laravel\WorkOS\User;
|
10 | 12 | use Laravel\WorkOS\WorkOS;
|
| 13 | +use Symfony\Component\HttpFoundation\Response; |
11 | 14 | use WorkOS\UserManagement;
|
12 | 15 |
|
13 | 16 | class AuthKitAuthenticationRequest extends FormRequest
|
@@ -99,17 +102,41 @@ protected function updateUsing(AppUser $user, User $userFromWorkOS): AppUser
|
99 | 102 | ]);
|
100 | 103 | }
|
101 | 104 |
|
| 105 | + /** |
| 106 | + * Redirect the user to the previous URL or a default URL if no previous URL is available. |
| 107 | + */ |
| 108 | + public function redirect(string $default = '/'): Response |
| 109 | + { |
| 110 | + $previousUrl = rtrim(base64_decode($this->sessionState()['previous_url'] ?? '/')) ?: null; |
| 111 | + |
| 112 | + $to = ! is_null($previousUrl) && $previousUrl !== URL::to('/') |
| 113 | + ? $previousUrl |
| 114 | + : $default; |
| 115 | + |
| 116 | + return class_exists(Inertia::class) |
| 117 | + ? Inertia::location($to) |
| 118 | + : redirect($to); |
| 119 | + } |
| 120 | + |
102 | 121 | /**
|
103 | 122 | * Ensure the request state is valid.
|
104 | 123 | */
|
105 | 124 | protected function ensureStateIsValid(): void
|
106 | 125 | {
|
107 | 126 | $state = json_decode($this->query('state'), true)['state'] ?? false;
|
108 | 127 |
|
109 |
| - if ($state !== $this->session()->get('state')) { |
| 128 | + if ($state !== ($this->sessionState()['state'] ?? false)) { |
110 | 129 | abort(403);
|
111 | 130 | }
|
112 | 131 |
|
113 | 132 | $this->session()->forget('state');
|
114 | 133 | }
|
| 134 | + |
| 135 | + /** |
| 136 | + * Get the session state. |
| 137 | + */ |
| 138 | + protected function sessionState(): array |
| 139 | + { |
| 140 | + return json_decode($this->session()->get('state'), true) ?: []; |
| 141 | + } |
115 | 142 | }
|
0 commit comments