Anmeldung Chunk 5: Doku und Einzelbenutzer-Hook
Docker Image / test (push) Canceled after 0s
Docker Image / image (push) Canceled after 0s

This commit is contained in:
loki committed 2026-10-10 21:48:17 +02:00
1 parent 18327095dc
commit 2d256b6f9c
1 file changed
+27 -1
+27 -1
View File
@@ -174,11 +174,37 @@ Wichtig: Die App verwendet SQLite im **WAL-Modus**. Deshalb vor dem Restore imme
## Sicherheit und Daten
- MyTime hat keine Anmeldung. Nur im Heimnetz betreiben, keinen Router-Port ins Internet weiterleiten und den Port in der Firewall auf das LAN begrenzen.
- MyTime hat standardmäßig keine Anmeldung (`AUTH_MODE=off`). Nur im Heimnetz betreiben, keinen Router-Port ins Internet weiterleiten und den Port in der Firewall auf das LAN begrenzen. Wer die optionale Anmeldung einschaltet (siehe unten), betreibt den Dienst trotzdem nur im Heimnetz.
- Der Container startet und läuft als Non-Root-User `node` (UID:GID `1000:1000`); `compose.yaml` und `compose.dev.yaml` erzwingen das zusätzlich per `user: "1000:1000"`. Einmalige Migration bestehender Daten: `sudo chown -R 1000:1000 data backups`.
- Datenbank: `./data/app.sqlite3`; Sicherungen: `./backups/`.
- Daten und Sicherungen sind in `.gitignore` ausgeschlossen und werden nicht mit dem Quellcode veröffentlicht.
## Anmeldung (optional)
Standardmäßig ist die Anmeldung ausgeschaltet und die App verhält sich wie bisher. Mit `AUTH_MODE=password` oder `AUTH_MODE=sso` stehen alle Seiten und API-Routen nur noch nach Anmeldung zur Verfügung (Ausnahmen: `/api/auth/*` und der Docker-Healthcheck `/api/health`).
1. `.env.example` nach `.env` kopieren und anpassen:
| Variable | Bedeutung |
| --- | --- |
| `AUTH_MODE` | `off` (Standard), `password` oder `sso`. |
| `BETTER_AUTH_SECRET` | Pflicht bei aktiver Anmeldung, mindestens 32 Zeichen (`openssl rand -base64 32`). |
| `BETTER_AUTH_URL` | Pflicht bei aktiver Anmeldung, z. B. `http://<server-ip>:3100`. |
| `OIDC_DISCOVERY_URL` | Nur `sso`: Discovery-URL des Anbieters, z. B. `https://auth.lan/application/o/mytime/.well-known/openid-configuration`. |
| `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | Nur `sso`: Client-Daten aus dem Anbieter (Authentik, Keycloak, Zitadel …). |
2. Dienst neu starten (`docker compose up -d` bzw. `docker compose -f compose.dev.yaml up -d`).
3. **Erste Anmeldung** (`password`): Die leere Datenbank verlangt beim ersten Aufruf „Erste Anmeldung" – Name, E-Mail und Passwort anlegen. Danach ist die Registrierung geschlossen; es bleibt bei diesem einen Benutzer.
4. **SSO** (`sso`): Auf der Anmeldeseite erscheint „Mit SSO anmelden". Die App leitet zum OIDC-Anbieter weiter und legt beim ersten Login das Benutzerkonto automatisch an.
Hinweise:
- HTTP im Heimnetz genügt; sichere Cookies sind bewusst nicht erzwungen (`useSecureCookies` aus). Trotzdem gilt: kein Internet-Expose, LAN-Begrenzung bleibt.
- Abmelden steht im Kopf neben dem Theme-Schalter. Eine abgelaufene Sitzung führt zurück zur Anmeldung statt zur Fehlerwand.
- Sitzungs-, Benutzer- und Kontodaten liegen als Tabellen `session`, `user`, `account`, `verification` in derselben `app.sqlite3` und werden mitgesichert.
## Entwicklung und Tests
Voraussetzungen: Node.js 22 und npm.