scopes(['publicData'])->redirect(); } public function handleProviderCallback(Request $request, JwtService $jwtService): RedirectResponse { try { Log::info('EVE Callback Configuration Check', [ 'configured_client_id' => config('services.eveonline.client_id'), 'configured_redirect' => config('services.eveonline.redirect'), 'request_full_url' => $request->fullUrl(), 'request_query' => $request->query(), ]); $ssoUser = Socialite::driver('eveonline')->user(); $characterId = (int) $ssoUser->getId(); $characterName = $ssoUser->getName() ?: ($ssoUser->getNickname() ?? 'Unknown'); $raw = $ssoUser->user ?? []; $characterOwnerHash = $raw['CharacterOwnerHash'] ?? $raw['character_owner_hash'] ?? $raw['owner_hash'] ?? ''; $token = $ssoUser->token; $refreshToken = $ssoUser->refreshToken ?? null; $expiresIn = $ssoUser->expiresIn ?? null; $user = User::updateOrCreate( ['character_id' => $characterId], [ 'character_name' => $characterName, 'character_owner_hash' => $characterOwnerHash, 'token' => $token, 'refresh_token' => $refreshToken, 'expiresIn' => $expiresIn, ] ); // Always regenerate JWT on successful login $jwtService->forceRefresh($user); Auth::login($user, true); $request->session()->regenerate(); return redirect()->route('dashboard'); } } catch (ClientException $e) { Log::error('EVE token exchange failed', [ 'message' => $e->getMessage(), 'response_body' => $e->hasResponse() ? (string) $e->getResponse()->getBody() : null, 'configured_redirect' => config('services.eveonline.redirect'), 'configured_client_id' => config('services.eveonline.client_id'), ]); return redirect() ->route('login') ->with('error', 'EVE token exchange failed. Check client ID, client secret, and redirect URI.'); } catch (Throwable $e) { Log::error('EVE SSO callback failed', [ 'message' => $e->getMessage(), 'exception' => get_class($e), ]); report($e); return redirect() ->route('login') ->with('error', 'SSO login failed. Please try again.'); } }