docs: add wiki page
43
Authentifizierung.md
Normal file
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
|
||||||
Reference in New Issue
Block a user