controller update

This commit is contained in:
2026-03-05 18:43:19 -06:00
parent 14588269d6
commit 020e473dc9
9 changed files with 196 additions and 42 deletions

View File

@@ -0,0 +1,71 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
use Throwable;
class EveLoginController extends Controller
{
public function showLogin()
{
return view('auth.eve');
}
public function redirectToProvider(): RedirectResponse
{
// "eveonline" driver registered via SocialiteProviders
return Socialite::driver('eveonline')->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();
// Socialite user basics
$characterId = (int) $ssoUser->getId();
$characterName = $ssoUser->getName() ?: ($ssoUser->getNickname() ?? 'Unknown');
// 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'] ?? '';
$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,
// "user" holds jwt - you can set it later when you add JWT issuance.
'user' => null,
]
);
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.
return redirect()->route('login')->with('error', 'SSO login failed. Please try again.');
}
}
}