feat: v1.1 - random re-roll, shopping summary, offline PWA, auth prep, profile page
This commit is contained in:
63
features/AUTH-V2.md
Normal file
63
features/AUTH-V2.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user