update 20.10.2025

This commit is contained in:
Kevin Adametz 2025-10-20 17:42:08 +02:00
parent 8c11130b5d
commit a939cd51ef
616 changed files with 84821 additions and 4121 deletions

61
app/Http/Controllers/Portal/Auth/LoginController.php Executable file → Normal file
View file

@ -23,7 +23,7 @@ class LoginController extends Controller
public function showLoginForm()
{
//wenn als Berater eingeloggt, dann zum Login wechseln
if(Auth::guard('user')->check()){
if (Auth::guard('user')->check()) {
return redirect()->route('portal.change_login');
}
//wenn als Kunde eingeloggt, dann direkt zum Dashboard
@ -41,15 +41,18 @@ class LoginController extends Controller
// 1. Prüfen, ob die E-Mail im System bekannt ist über Kunden-Tabelle)
$customer = Customer::firstOrCreate(['email' => $email]); // Erstellt Kunden, wenn nicht vorhanden
if($customer && $customer->language){
if ($customer && $customer->language) {
\App::setLocale($customer->language);
}
//add user_shop_domain for back
$customer->user_shop_domain = session('user_shop_domain');
$customer->save();
// if (!$customerExists && !$orderExists) { // Oder nur eine Prüfung, je nach Logik
if (!$customer) { // Prüfung anhand des Customer-Models
throw ValidationException::withMessages([
'email' => __('auth.failed_customer'), // Generische Fehlermeldung
]);
throw ValidationException::withMessages([
'email' => __('auth.failed_customer'), // Generische Fehlermeldung
]);
}
// 2. Alten Token löschen (optional, aber empfohlen)
DB::table('otp_tokens')->where('email', $email)->delete();
@ -70,10 +73,10 @@ class LoginController extends Controller
try {
Mail::to($email)->locale(\App::getLocale())->send(new MailOTPCustomer($otp, $email));
} catch (\Exception $e) {
// Logge den Fehler
\Log::error('OTP Send Error: ' . $e->getMessage());
// Gib eine Fehlermeldung zurück, ohne Details preiszugeben
return back()->withErrors(['email' => 'Konnte E-Mail nicht senden. Bitte versuchen Sie es später erneut.'])->withInput();
// Logge den Fehler
\Log::error('OTP Send Error: ' . $e->getMessage());
// Gib eine Fehlermeldung zurück, ohne Details preiszugeben
return back()->withErrors(['email' => 'Konnte E-Mail nicht senden. Bitte versuchen Sie es später erneut.'])->withInput();
}
@ -86,26 +89,26 @@ class LoginController extends Controller
public function showOtpForm(Request $request, $email = null, $otp = null)
{
//wenn als Berater eingeloggt, dann zum Login wechseln
if(Auth::guard('user')->check()){
if (Auth::guard('user')->check()) {
return redirect()->route('portal.change_login');
}
//wenn als Kunde eingeloggt, dann zum Dashboard wechseln
if (Auth::guard('customers')->check()) {
return redirect()->route('portal.dashboard');
}
// E-Mail aus der Session holen (oder als Request-Parameter erwarten)
if($email) {
if (Auth::guard('customers')->check()) {
return redirect()->route('portal.dashboard');
}
// E-Mail aus der Session holen (oder als Request-Parameter erwarten)
if ($email) {
$email = $email;
} else {
} else {
$email = session('otp_email', $request->query('email'));
}
}
if (!$email) {
return redirect()->route('portal.login.form')->withErrors(['message' => 'Sitzung abgelaufen oder E-Mail fehlt.']);
}
// CSRF-Token regenerieren für neue Session
$request->session()->regenerateToken();
// Übergebe sowohl 'email' als auch 'otp' an die View
return view('portal.auth.verify-otp', ['email' => $email, 'otp_value' => $otp]); // Variable umbenannt zu otp_value für Klarheit
}
@ -135,24 +138,24 @@ class LoginController extends Controller
if (!$customer) {
// Sollte eigentlich nicht passieren, wenn sendOtp korrekt funktioniert hat
DB::table('otp_tokens')->where('email', $email)->delete();
return back()->withErrors(['otp' => __('auth.failed')])->withInput(['email' => $email]);
DB::table('otp_tokens')->where('email', $email)->delete();
return back()->withErrors(['otp' => __('auth.failed')])->withInput(['email' => $email]);
}
// 4. Kunden einloggen über den 'customers'-Guard
Auth::guard('customers')->login($customer); // Loggt den gefundenen Kunden ein
// 5. Explizite Session-Speicherung
$request->session()->save();
// 6. OTP-Eintrag löschen
DB::table('otp_tokens')->where('email', $email)->delete();
// 7. Session Token regenerieren (statt komplette Session)
$request->session()->regenerate();
$request->session()->regenerate();
// 8. customer DB aktualisieren
$shopping_user = ShoppingUser::where('billing_email', $email)->latest()->first();
if($shopping_user){
if ($shopping_user) {
$data = [
'name' => $shopping_user->billing_firstname . ' ' . $shopping_user->billing_lastname,
'shopping_user_id' => $shopping_user->id,
@ -161,7 +164,7 @@ class LoginController extends Controller
'language' => session('locale') ?? 'de',
];
$customer->update($data);
}else{
} else {
$data = [
'name' => __('portal.guest'),
'shopping_user_id' => null,
@ -185,7 +188,7 @@ class LoginController extends Controller
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect($url);
}
}
// Logout für Berater
public function logoutChange(Request $request)
@ -200,4 +203,4 @@ class LoginController extends Controller
session(['locale' => $locale]);
return redirect()->route('portal.login.form');
}
}
}