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