Hallo zusammen,
ich arbeite gerade an einer Benutzerregistrierung und versuche herauszufinden, welcher der richtige Ansatz ist...
Ansatz 1: Benutzerregistrierung direkt in die users-Tabelle
Vorteil:
Nachteil:
Ansatz 2: Daten in eine eigene registrations-Tabelle integrieren
Vorteil:
Nachteil:
Ansatz 3: Daten vollständig in Link integrieren
Vorteil:
Nachteil:
Aktuell tendiere ich zu einem direkten Eintrag in die users-Tabelle.
Habe ich vielleicht einen Ansatz komplett vergessen?
Wie funktionieren gängige Systeme?
Spricht etwas gegen Ansatz 1, was ich übersehen habe?
ich arbeite gerade an einer Benutzerregistrierung und versuche herauszufinden, welcher der richtige Ansatz ist...
Ansatz 1: Benutzerregistrierung direkt in die users-Tabelle
- Eine neue Benutzerregistrierung fügt direkt in die Benutzer-Tabelle einen Eintrag ein
- Dieser wird über ein disabled-Flag deaktiviert wird und über ein email_confirmed_at = null als unbestätigt markiert
- Dann wird eine E-Mail mit einem signierten Link und einer Gültigkeitsdauer verschickt, um den Benutzer freizuschalten
- Beim Klick auf den Link wird das disabled flag entfernt und das Datum für email_confirmed_at gesetzt
Vorteil:
- Validierung findet nur an einer Stelle statt
- Bereits vorhandene Benutzer und E-Mail-Adressen lassen sich leicht prüfen
- Man kann einfach herausfinden, wie viele unbestätigte Registrierungen es gibt (Statistik)
Nachteil:
- User-Tabelle wird unnötig voll
- Falls es eine Sicherheitslücke gibt, kann man die users-Tabelle manipulieren
Ansatz 2: Daten in eine eigene registrations-Tabelle integrieren
- Eine neue Benutzerregistrierung wird in eine Extra Tabelle registrations gespeichert, die weitgehend der User-Tabelle entspricht
- Dann wird eine E-Mail mit einem signierten Link und einer Gültigkeitsdauer verschickt, um den Benutzer freizuschalten
- Beim Klick auf den Link wird der Eintrag in die users-Tabelle kopiert / verschoben
Vorteil:
- Sicherheitslücken wirken sich nicht direkt aus, sondern vorerst nur indirekt
- Die users-Tabelle wird nicht unnötig gefüllt
- Man kann leicht herausfinden, welche unbestätigten Registrierungen es gibt
Nachteil:
- Die Prüfung vorhandener Benutzernamen und E-Mail-Adressen erfolgt in 2 Tabellen
- Der Aufbau der beiden Tabellen muss synchron gehalten werden (z.B. wenn eine neue Spalte in der users-Tabelle hinzukommt, muss diese auch in der registrations-Tabelle hinzugefügt werden)
Ansatz 3: Daten vollständig in Link integrieren
- Eine neue Benutzerregistrierung wird vollständig AES verschlüsselt in den Bestätigungslink integriert, dann signiert.
- Beim Klick auf den Link werden die Daten entschlüsselt, validiert und ein Eintrag in die users-Tabelle eingefügt
Vorteil:
- Es müssen keine unnötigen Daten gespeichert werden
- Die users-Tabelle wird nicht unnötig gefüllt
Nachteil:
- Begrenzte Datenmenge in den Links (z.B. 4000 Zeichen für maximale URL-Länge)
- Bereits vorhandene Benutzer können durch eine zeitliche Verschiebung doppelt vergeben werden
- Validierung beim Generieren und Bestätigen des Links erforderlich
- Unbestätigte Registrierungen können nicht statistisch erfasst werden (jedenfalls ohne extra Logik / Datenspeicherung nicht)
Aktuell tendiere ich zu einem direkten Eintrag in die users-Tabelle.
Habe ich vielleicht einen Ansatz komplett vergessen?
Wie funktionieren gängige Systeme?
Spricht etwas gegen Ansatz 1, was ich übersehen habe?
Kommentar