validate([ 'email' => 'required|email|exists:users,email', ], [ 'email.required' => 'E-Mail Adresse ist erforderlich', 'email.email' => 'Ungültige E-Mail Adresse', 'email.exists' => 'Diese E-Mail Adresse existiert nicht', ]); // Löschen Sie alte Tokens DB::table('password_reset_tokens')->where('email', $request->email)->delete(); // Generieren Sie einen neuen Token $token = Str::random(64); // Speichern Sie den Token DB::table('password_reset_tokens')->insert([ 'email' => $request->email, 'token' => $token, 'created_at' => now(), ]); // Hier würde normaler eine E-Mail versendet werden // Mail::send('emails.password-reset', ['token' => $token], function ($message) use ($request) { // $message->to($request->email); // }); return response()->json([ 'success' => true, 'message' => 'Passwort-Zurücksetzen-Link wurde gesendet', 'token' => $token, // ENTFERNEN Sie dies in Produktion - nur für Demo ], 200); } catch (ValidationException $e) { return response()->json([ 'success' => false, 'message' => 'Validierungsfehler', 'errors' => $e->errors(), ], 422); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Fehler beim Verarbeiten der Anfrage', 'error' => $e->getMessage(), ], 500); } } /** * Reset password with token * POST /api/auth/reset-password */ public function resetPassword(Request $request): JsonResponse { try { $request->validate([ 'token' => 'required|string', 'email' => 'required|email|exists:users,email', 'password' => 'required|min:8|confirmed', ], [ 'token.required' => 'Token ist erforderlich', 'email.required' => 'E-Mail Adresse ist erforderlich', 'email.email' => 'Ungültige E-Mail Adresse', 'email.exists' => 'Diese E-Mail Adresse existiert nicht', 'password.required' => 'Passwort ist erforderlich', 'password.min' => 'Passwort muss mindestens 8 Zeichen lang sein', 'password.confirmed' => 'Passwortbestätigung stimmt nicht überein', ]); // Suchen Sie den Token $resetToken = DB::table('password_reset_tokens') ->where('email', $request->email) ->where('token', $request->token) ->first(); if (!$resetToken) { return response()->json([ 'success' => false, 'message' => 'Ungültiger oder abgelaufener Token', ], 422); } // Überprüfen Sie, ob der Token nicht älter als 1 Stunde ist if (now()->diffInMinutes($resetToken->created_at) > 60) { // Löschen Sie den abgelaufenen Token DB::table('password_reset_tokens') ->where('email', $request->email) ->delete(); return response()->json([ 'success' => false, 'message' => 'Token ist abgelaufen. Bitte fordern Sie einen neuen an', ], 422); } // Aktualisieren Sie das Benutzerpasswort $user = User::where('email', $request->email)->first(); $user->update(['password' => Hash::make($request->password)]); // Löschen Sie den Token DB::table('password_reset_tokens') ->where('email', $request->email) ->delete(); // Widerrufen Sie alle Tokens $user->tokens()->delete(); return response()->json([ 'success' => true, 'message' => 'Passwort erfolgreich zurückgesetzt. Bitte melden Sie sich erneut an', ], 200); } catch (ValidationException $e) { return response()->json([ 'success' => false, 'message' => 'Validierungsfehler', 'errors' => $e->errors(), ], 422); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'Fehler beim Zurücksetzen des Passworts', 'error' => $e->getMessage(), ], 500); } } /** * Verify if reset token is valid * POST /api/auth/verify-reset-token */ public function verifyResetToken(Request $request): JsonResponse { try { $request->validate([ 'token' => 'required|string', 'email' => 'required|email|exists:users,email', ]); $resetToken = DB::table('password_reset_tokens') ->where('email', $request->email) ->where('token', $request->token) ->first(); if (!$resetToken) { return response()->json([ 'success' => false, 'valid' => false, 'message' => 'Ungültiger Token', ], 422); } // Überprüfen Sie Ablauf if (now()->diffInMinutes($resetToken->created_at) > 60) { return response()->json([ 'success' => false, 'valid' => false, 'message' => 'Token ist abgelaufen', ], 422); } return response()->json([ 'success' => true, 'valid' => true, 'message' => 'Token ist gültig', ], 200); } catch (ValidationException $e) { return response()->json([ 'success' => false, 'valid' => false, 'message' => 'Validierungsfehler', 'errors' => $e->errors(), ], 422); } } }