64 lines
2.1 KiB
Markdown
64 lines
2.1 KiB
Markdown
# AUTH v2 — Spezifikation
|
|
|
|
## Übersicht
|
|
Simple Authentifizierung für Luna Recipes, damit mehrere User die App nutzen können.
|
|
|
|
## Auth-Methode
|
|
- **Email + Passwort** (primär)
|
|
- **Optional: PIN-Login** (4-6 Ziffern, für schnellen Zugang auf vertrautem Gerät)
|
|
- **Kein OAuth/Social Login** — zu komplex für v2
|
|
|
|
## Token-Strategie
|
|
- **JWT Access Token** — kurze Laufzeit (15 min)
|
|
- **Refresh Token** — lange Laufzeit (30 Tage), httpOnly Cookie
|
|
- Token-Rotation bei jedem Refresh
|
|
- Logout invalidiert Refresh Token
|
|
|
|
## Multi-User Support
|
|
- Vorgesehene User: **Luna**, **Marc**, **Gäste**
|
|
- Gast-Zugang: Read-only, kein Login nötig (Feature-Flag)
|
|
- Jeder User hat eigene Favoriten und Notizen
|
|
- Rezepte gehören einem User (created_by)
|
|
- Einkaufsliste: Shared per Haushalt (alle sehen dieselbe)
|
|
|
|
## Datenmodell-Änderungen
|
|
```sql
|
|
CREATE TABLE users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
email TEXT UNIQUE NOT NULL,
|
|
name TEXT NOT NULL,
|
|
password_hash TEXT NOT NULL,
|
|
pin_hash TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- Bestehende Tabellen erweitern:
|
|
ALTER TABLE recipes ADD COLUMN created_by UUID REFERENCES users(id);
|
|
ALTER TABLE notes ADD COLUMN user_id UUID REFERENCES users(id);
|
|
ALTER TABLE favorites ADD COLUMN user_id UUID REFERENCES users(id);
|
|
```
|
|
|
|
## API-Endpunkte
|
|
- `POST /api/auth/register` — { email, password, name }
|
|
- `POST /api/auth/login` — { email, password } → { accessToken, user }
|
|
- `POST /api/auth/refresh` — Cookie → { accessToken }
|
|
- `POST /api/auth/logout` — Invalidiert Refresh Token
|
|
- `GET /api/auth/me` — Aktueller User
|
|
|
|
## Sharing
|
|
- Rezept-Links sind öffentlich teilbar (kein Login zum Ansehen nötig)
|
|
- Format: `/recipe/:slug` (bleibt gleich)
|
|
- Optional: "Rezept kopieren" Button für eingeloggte User
|
|
|
|
## Migration
|
|
- Alle bestehenden Rezepte werden dem Default-User (Luna) zugewiesen
|
|
- Bestehende Favoriten/Notizen → Luna
|
|
- Keine Breaking Changes für nicht-eingeloggte Nutzung in v2.0
|
|
|
|
## Nicht in v2
|
|
- Social Login (Google, Apple)
|
|
- Email-Verifizierung
|
|
- Passwort-Reset per Email
|
|
- Admin-Panel
|
|
- Rollen/Permissions
|