2.1 KiB
2.1 KiB
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
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 TokenGET /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