|
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