🚀 Refactor database connection for improved performance and stability.
This commit is contained in:
parent
1510f87ea7
commit
38f6ba9115
@ -306,26 +306,62 @@ def login():
|
|||||||
|
|
||||||
error = None
|
error = None
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
# Unterscheiden zwischen JSON-Anfragen und normalen Formular-Anfragen
|
# Debug-Logging für Request-Details
|
||||||
is_json_request = request.is_json or request.headers.get('Content-Type') == 'application/json'
|
auth_logger.debug(f"Login-Request: Content-Type={request.content_type}, Headers={dict(request.headers)}")
|
||||||
|
|
||||||
# Daten je nach Anfrageart auslesen
|
# Erweiterte Content-Type-Erkennung für AJAX-Anfragen
|
||||||
|
content_type = request.content_type or ""
|
||||||
|
is_json_request = (
|
||||||
|
request.is_json or
|
||||||
|
"application/json" in content_type or
|
||||||
|
request.headers.get('X-Requested-With') == 'XMLHttpRequest' or
|
||||||
|
request.headers.get('Accept', '').startswith('application/json')
|
||||||
|
)
|
||||||
|
|
||||||
|
# Robuste Datenextraktion
|
||||||
|
username = None
|
||||||
|
password = None
|
||||||
|
remember_me = False
|
||||||
|
|
||||||
|
try:
|
||||||
if is_json_request:
|
if is_json_request:
|
||||||
data = request.get_json()
|
# JSON-Request verarbeiten
|
||||||
username = data.get("username") or data.get("email") # Fallback für email
|
try:
|
||||||
|
data = request.get_json(force=True) or {}
|
||||||
|
username = data.get("username") or data.get("email")
|
||||||
password = data.get("password")
|
password = data.get("password")
|
||||||
remember_me = data.get("remember_me", False)
|
remember_me = data.get("remember_me", False)
|
||||||
else:
|
except Exception as json_error:
|
||||||
# Korrigierte Feldnamen - Template verwendet "email" nicht "username"
|
auth_logger.warning(f"JSON-Parsing fehlgeschlagen: {str(json_error)}")
|
||||||
username = request.form.get("email") # Geändert von "username" zu "email"
|
# Fallback zu Form-Daten
|
||||||
|
username = request.form.get("email")
|
||||||
password = request.form.get("password")
|
password = request.form.get("password")
|
||||||
remember_me = request.form.get("remember_me") == "on" # Geändert von "remember-me"
|
remember_me = request.form.get("remember_me") == "on"
|
||||||
|
else:
|
||||||
|
# Form-Request verarbeiten
|
||||||
|
username = request.form.get("email")
|
||||||
|
password = request.form.get("password")
|
||||||
|
remember_me = request.form.get("remember_me") == "on"
|
||||||
|
|
||||||
|
# Zusätzlicher Fallback für verschiedene Feldnamen
|
||||||
|
if not username:
|
||||||
|
username = request.form.get("username") or request.values.get("email") or request.values.get("username")
|
||||||
|
if not password:
|
||||||
|
password = request.form.get("password") or request.values.get("password")
|
||||||
|
|
||||||
|
except Exception as extract_error:
|
||||||
|
auth_logger.error(f"Fehler beim Extrahieren der Login-Daten: {str(extract_error)}")
|
||||||
|
error = "Fehler beim Verarbeiten der Anmeldedaten."
|
||||||
|
if is_json_request:
|
||||||
|
return jsonify({"error": error, "success": False}), 400
|
||||||
|
|
||||||
if not username or not password:
|
if not username or not password:
|
||||||
error = "Benutzername und Passwort müssen angegeben werden."
|
error = "E-Mail-Adresse und Passwort müssen angegeben werden."
|
||||||
|
auth_logger.warning(f"Unvollständige Login-Daten: username={bool(username)}, password={bool(password)}")
|
||||||
if is_json_request:
|
if is_json_request:
|
||||||
return jsonify({"error": error}), 400
|
return jsonify({"error": error, "success": False}), 400
|
||||||
else:
|
else:
|
||||||
|
db_session = None
|
||||||
try:
|
try:
|
||||||
db_session = get_db_session()
|
db_session = get_db_session()
|
||||||
# Suche nach Benutzer mit übereinstimmendem Benutzernamen oder E-Mail
|
# Suche nach Benutzer mit übereinstimmendem Benutzernamen oder E-Mail
|
||||||
@ -339,30 +375,39 @@ def login():
|
|||||||
db_session.commit()
|
db_session.commit()
|
||||||
|
|
||||||
login_user(user, remember=remember_me)
|
login_user(user, remember=remember_me)
|
||||||
auth_logger.info(f"Benutzer {username} hat sich angemeldet")
|
auth_logger.info(f"Benutzer {username} hat sich erfolgreich angemeldet")
|
||||||
|
|
||||||
next_page = request.args.get("next")
|
next_page = request.args.get("next")
|
||||||
db_session.close()
|
|
||||||
|
|
||||||
if is_json_request:
|
if is_json_request:
|
||||||
return jsonify({"success": True, "redirect_url": next_page or url_for("index")})
|
return jsonify({
|
||||||
|
"success": True,
|
||||||
|
"message": "Anmeldung erfolgreich",
|
||||||
|
"redirect_url": next_page or url_for("index")
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
if next_page:
|
if next_page:
|
||||||
return redirect(next_page)
|
return redirect(next_page)
|
||||||
return redirect(url_for("index"))
|
return redirect(url_for("index"))
|
||||||
else:
|
else:
|
||||||
error = "Ungültiger Benutzername oder Passwort."
|
error = "Ungültige E-Mail-Adresse oder Passwort."
|
||||||
auth_logger.warning(f"Fehlgeschlagener Login-Versuch für Benutzer {username}")
|
auth_logger.warning(f"Fehlgeschlagener Login-Versuch für Benutzer {username}")
|
||||||
db_session.close()
|
|
||||||
|
|
||||||
if is_json_request:
|
if is_json_request:
|
||||||
return jsonify({"error": error}), 401
|
return jsonify({"error": error, "success": False}), 401
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Fehlerbehandlung für Datenbankprobleme
|
# Fehlerbehandlung für Datenbankprobleme
|
||||||
error = "Anmeldefehler. Bitte versuchen Sie es später erneut."
|
error = "Anmeldefehler. Bitte versuchen Sie es später erneut."
|
||||||
auth_logger.error(f"Fehler bei der Anmeldung: {str(e)}")
|
auth_logger.error(f"Fehler bei der Anmeldung: {str(e)}")
|
||||||
if is_json_request:
|
if is_json_request:
|
||||||
return jsonify({"error": error}), 500
|
return jsonify({"error": error, "success": False}), 500
|
||||||
|
finally:
|
||||||
|
# Sicherstellen, dass die Datenbankverbindung geschlossen wird
|
||||||
|
if db_session:
|
||||||
|
try:
|
||||||
|
db_session.close()
|
||||||
|
except Exception as close_error:
|
||||||
|
auth_logger.error(f"Fehler beim Schließen der DB-Session: {str(close_error)}")
|
||||||
|
|
||||||
return render_template("login.html", error=error)
|
return render_template("login.html", error=error)
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user