Dritte Login-Methode neben Passwort und Passkey, konfiguriert über OIDC_ISSUER/OIDC_CLIENT_ID/OIDC_CLIENT_SECRET (optional, Button bleibt ohne diese Vars ausgeblendet). Authorization-Code-Flow mit PKCE, ID-Token-Signaturprüfung gegen das JWKS des Providers via neuer Abhängigkeit "jose" (RS256 fest gepinnt gegen Algorithm-Confusion), State/Nonce kurzlebig und einmalig verwendbar in neuer Tabelle oidc_states (Migration 0003, analog zu webauthn_challenges). Funktioniert ausschließlich für bereits angelegte Benutzer (Abgleich per E-Mail) – kein Auto-Provisioning, keine Rollenübernahme aus Claims, beides bleibt exklusiv über die bestehende Benutzerverwaltung steuerbar. app/login/page.tsx zu Server-Component-Wrapper reduziert (prüft isConfigured(), liest ?error= aus searchParams), bisheriger Inhalt nach components/LoginForm.tsx verschoben. Version 1.9.0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
63 lines
3.1 KiB
Bash
63 lines
3.1 KiB
Bash
# Vorlage für .env.local (Entwicklung) bzw. die Umgebungsvariablen
|
||
# beim Hoster (Live-Betrieb). Echte Werte niemals committen!
|
||
|
||
# Nur für Docker Compose relevant: Passwort für den mitgelieferten
|
||
# PostgreSQL-Container (Dienst "db" in docker-compose.yml). Daraus baut
|
||
# docker-compose.yml die DATABASE_URL für die App-Container selbst
|
||
# zusammen – die Zeile unten wird beim Betrieb per Docker Compose
|
||
# NICHT verwendet, nur bei manuellem "npm run dev"/"npm run start"
|
||
# gegen eine selbst betriebene PostgreSQL-Instanz.
|
||
#
|
||
# Nur Buchstaben/Zahlen verwenden (z. B. mit "openssl rand -hex 24"
|
||
# erzeugen) – Zeichen wie #, $, Leerzeichen oder Anführungszeichen
|
||
# werden von Docker Compose beim Einlesen von .env-Dateien speziell
|
||
# behandelt (# beginnt z. B. einen Kommentar) und können das Passwort
|
||
# unbemerkt verstümmeln.
|
||
#
|
||
# WICHTIG: PostgreSQL setzt dieses Passwort nur EINMALIG beim allerersten
|
||
# Start auf einem leeren Datenverzeichnis. Wird der Wert hier später
|
||
# geändert (oder "docker compose up" auch nur einmal ohne
|
||
# "--env-file .env.local" ausgeführt, bevor er gesetzt war), bleibt im
|
||
# bereits angelegten Docker-Volume das alte Passwort stehen – die App
|
||
# bekommt dann "password authentication failed for user postgres". Fix:
|
||
# "docker compose down && docker volume rm canteen-menu_pgdata", dann
|
||
# neu starten (nur unbedenklich, solange noch keine echten Daten drin
|
||
# sind – siehe DEPLOYMENT.md).
|
||
LOCAL_PG_PASSWORD=<beliebiges-sicheres-passwort>
|
||
|
||
# Verbindung zur PostgreSQL-Datenbank (nur für den Betrieb OHNE Docker
|
||
# Compose relevant, s. o.).
|
||
DATABASE_URL=postgres://postgres:<passwort>@localhost:5432/canteen_menu
|
||
|
||
# Öffentliche URL, unter der die App erreichbar ist (Schema + Domain).
|
||
# Wird für den CSRF-Origin-Check hinter Reverse-Proxies genutzt und ist
|
||
# zugleich die Passkey-Domain (RP-ID/Origin werden direkt daraus
|
||
# abgeleitet, kein separater Konfigurationsschritt nötig).
|
||
APP_URL=http://localhost:3000
|
||
|
||
# Titel im Browser-Tab und Überschrift, solange kein Logo hochgeladen ist.
|
||
SITE_TITLE=Canteen Menu
|
||
|
||
# Optional: E-Mail-Adresse für den automatisch angelegten Admin-Erstnutzer
|
||
# (nur relevant, solange die users-Tabelle noch leer ist). Ohne Angabe
|
||
# wird admin@<Hostname aus APP_URL> verwendet.
|
||
ADMIN_EMAIL=
|
||
|
||
# Optional: DeepL-API-Key für automatische Übersetzung von Gerichten nach
|
||
# Englisch/Polnisch (kostenloser Free-Tier unter deepl.com/de/pro-api,
|
||
# Free-Keys enden auf ":fx"). Ohne Key bleibt "Automatisch übersetzen"
|
||
# inaktiv; Englisch/Polnisch lassen sich weiterhin manuell eintragen.
|
||
DEEPL_API_KEY=
|
||
|
||
# Optional: SSO-Login per OpenID Connect (z. B. gegen ein selbst
|
||
# gehostetes Authentik). Ohne diese drei Werte bleibt der SSO-Button auf
|
||
# der Anmeldeseite ausgeblendet, Passwort/Passkey funktionieren
|
||
# unverändert. SSO-Login funktioniert NUR für bereits unter "Benutzer"
|
||
# angelegte E-Mail-Adressen – es werden keine neuen Konten angelegt und
|
||
# die Rolle (Admin/Kantinenmitarbeiter) bleibt ausschließlich dort
|
||
# steuerbar. Beim Identity Provider als Redirect-URI eintragen:
|
||
# <APP_URL>/api/auth/oidc/callback
|
||
OIDC_ISSUER=
|
||
OIDC_CLIENT_ID=
|
||
OIDC_CLIENT_SECRET=
|