docs: add wiki page

2026-04-14 12:59:53 +02:00
parent f0f7ae0cb0
commit ec5c0e81fb

43
Authentifizierung.md Normal file

@@ -0,0 +1,43 @@
# Authentifizierung
## Nutzertypen
| Typ | ID-Typ | Beschreibung |
|-----|--------|-------------|
| Gast | `string` (Session-ID) | Temporär, kein Passwort, kein Profil |
| Nutzer | `number` (DB-ID) | Registriert, persistente Stats |
| Admin | `number` + `role: "admin"` | Vollzugriff auf Admin-Panel |
## Gast-Session
- Alphanumerischer Name wählbar
- Kann Echtzeit-Partien spielen
- Keine Freunde, keine gespeicherten KI-Partien
- `req.session.user.id` ist ein String
## Registrierung & Login
- Benutzername: alphanumerisch, eindeutig
- E-Mail: optional, eindeutig wenn angegeben
- Passwort: gehasht mit **argon2**
- Session via `express-session` (gespeichert in PostgreSQL)
## Admin-Rolle
1. `ADMIN_EMAIL` in `.env` setzen
2. Server setzt beim Start: `UPDATE "user" SET role='admin' WHERE email=$1`
3. Nutzer muss sich **neu einloggen** (Session wird aktualisiert)
Admins sehen im Header einen „Admin"-Button mit Schild-Icon.
## Session-Middleware
- `requireAuth` prüft ob Nutzer eingeloggt (numerische ID)
- `requireAdmin` prüft zusätzlich `role === "admin"`
- Ban-Check: Gebannte Nutzer erhalten 403, Session wird zerstört
- Socket.io: Session wird bei jedem Ereignis neu geladen
## Passwort-Sicherheit
- Hashing: argon2 (memory-hard, resistent gegen Brute-Force)
- Klartext-Passwort wird niemals gespeichert oder zurückgegeben