This commit is contained in:
2026-03-07 18:54:33 -06:00
parent 459e3ef864
commit 2347aa250e
13 changed files with 226 additions and 34 deletions

View File

@@ -29,33 +29,25 @@ class EveLoginController extends Controller
return Socialite::driver('eveonline')->scopes(['publicData'])->redirect();
}
public function handleProviderCallback(Request $request): RedirectResponse
public function handleProviderCallback(Request $request, JwtService $jwtService): 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.
// Well defensively extract what we can.
$raw = $ssoUser->user ?? [];
$characterOwnerHash =
$raw['CharacterOwnerHash'] ?? $raw['character_owner_hash'] ?? $raw['owner_hash'] ?? '';
Debugbar::info($characterOwnerHash);
$raw['CharacterOwnerHash']
?? $raw['character_owner_hash']
?? $raw['owner_hash']
?? '';
$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],
@@ -65,26 +57,22 @@ class EveLoginController extends Controller
'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();
// Always regenerate JWT on successful login
$jwtService->forceRefresh($user);
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);
report($e);
return redirect()
->route('login')
->with('error', 'SSO login failed. Please try again.');
}
}
}
}