Chronologisches Protokoll der Systemereignisse als neue Admin-Seite (/admin/reports/activity) mit Filter nach Ereignistyp, Zeitraum und Suche. Erfasst ab jetzt fortlaufend: - Registrierungen inkl. Weg (Formular, Google, Magic-Link) - Anmeldungen inkl. Weg (Passwort, Google, Magic-Link, Impersonation) - PM-Statuswechsel mit Ergebnis/Begründung (zentral im Status-Log-Hook; KI-/Scheduler-Wechsel erscheinen als „System") - Zahlungseingänge (Rechnungsspiegelung) und Credit-Aufladungen - Formular-Eingänge: Kontakt, Rechtsanfrage, Widerruf, Kündigung, Newsletter-Anmeldung (Observer auf den Modellen) Schreiben ist Best-Effort über den ActivityLog-Service — ein fehlgeschlagener Verlaufseintrag bricht nie den fachlichen Ablauf. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
64 lines
2 KiB
PHP
64 lines
2 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Auth;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use App\Listeners\RecordAuthActivity;
|
||
use App\Services\Auth\SocialAuthService;
|
||
use App\Support\LoginRedirect;
|
||
use Illuminate\Http\RedirectResponse;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\Auth;
|
||
use Laravel\Socialite\Facades\Socialite;
|
||
|
||
/**
|
||
* Google-Login (WS-6). Erst-Login legt – de-dupliziert über die E-Mail – einen
|
||
* aktiven, verifizierten customer-Account an; bestehende Accounts werden nur
|
||
* verknüpft. Deaktivierte Accounts werden nicht reaktiviert.
|
||
*/
|
||
class GoogleController extends Controller
|
||
{
|
||
public function redirect(): RedirectResponse
|
||
{
|
||
return Socialite::driver('google')->redirect();
|
||
}
|
||
|
||
public function callback(Request $request, SocialAuthService $social): RedirectResponse
|
||
{
|
||
try {
|
||
$googleUser = Socialite::driver('google')->user();
|
||
} catch (\Throwable) {
|
||
return redirect()->route('login')->withErrors([
|
||
'email' => __('Die Anmeldung mit Google ist fehlgeschlagen. Bitte versuchen Sie es erneut.'),
|
||
]);
|
||
}
|
||
|
||
$user = $social->resolveUser(
|
||
'google',
|
||
(string) $googleUser->getId(),
|
||
$googleUser->getEmail(),
|
||
$googleUser->getName(),
|
||
);
|
||
|
||
if (! $user || ! $user->is_active) {
|
||
return redirect()->route('login')->withErrors([
|
||
'email' => __('Ihr Konto ist nicht aktiv. Bitte wenden Sie sich an den Support.'),
|
||
]);
|
||
}
|
||
|
||
$request->attributes->set(RecordAuthActivity::AUTH_METHOD_ATTRIBUTE, 'google');
|
||
Auth::login($user, remember: true);
|
||
$request->session()->regenerate();
|
||
|
||
$user->forceFill([
|
||
'last_login_at' => now(),
|
||
'last_login_ip' => $request->ip(),
|
||
])->save();
|
||
|
||
return redirect(LoginRedirect::safeTarget(
|
||
$user,
|
||
$request->session()->pull('url.intended'),
|
||
LoginRedirect::homeFor($user),
|
||
));
|
||
}
|
||
}
|