scopes(['publicData'])->redirect(); } public function handleProviderCallback(Request $request): RedirectResponse { try { // Stateless can help in some deployments, but keep stateful by default. // If you run into "Invalid state" issues behind proxies, switch to ->stateless() $ssoUser = Socialite::driver('eveonline')->user(); Debugbar::warning($ssoUser); // Socialite user basics $characterId = (int) $ssoUser->getId(); Debugbar::info($characterId); $characterName = $ssoUser->getName() ?: ($ssoUser->getNickname() ?? 'Unknown'); Debugbar::info($characterName); // Provider-specific extra payload sometimes appears in user array / token response. // We’ll defensively extract what we can. $raw = $ssoUser->user ?? []; $characterOwnerHash = $raw['CharacterOwnerHash'] ?? $raw['character_owner_hash'] ?? $raw['owner_hash'] ?? ''; Debugbar::info($characterOwnerHash); $token = $ssoUser->token; Debugbar::info($token); $refreshToken = $ssoUser->refreshToken ?? null; Debugbar::info($refreshTokeen); $expiresIn = $ssoUser->expiresIn ?? null; Debugbar::info($expiresIn); $user = User::updateOrCreate( ['character_id' => $characterId], [ 'character_name' => $characterName, 'character_owner_hash' => $characterOwnerHash, 'token' => $token, 'refresh_token' => $refreshToken, 'expiresIn' => $expiresIn, // "user" holds jwt - you can set it later when you add JWT issuance. 'user_jwt' => null, ] ); Debugbar::info($user); //Issue JWT and store in the "user" column per your spec $jwt = $jwtService->make($user); $user->user_jwt = $jwt; $user->save(); Auth::login($user, true); $request->session()->regenerate(); return redirect()->route('dashboard'); } catch (Throwable $e) { // For now: fail back to login with a generic error. // Later you can add logging/telemetry. Debugbar::addThrowable($e); return redirect()->route('login')->with('error', $e); } } }