Files
luna-recipes/features/AUTH-V2.md

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 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