Ho una domanda sulla progettazione del database. Fondamentalmente voglio essere in grado di creare uno schema per un modello utente, quindi utilizzare questo modello utente in altri modelli che estendono l'utente ma voglio progettarlo in modo tale che sia abbastanza generico da essere utilizzato in ogni applicazione.
Ad esempio, un modello di profilo o account potrebbe estendere l'utente e, in entrambi i casi, saranno diversi in base all'applicazione Web che si sta progettando, ma le credenziali principali dell'utente non dovrebbero mai essere diverse tra tutte le applicazioni Web.
Quali campi pensi che dovrebbero essere nel modello utente?
Penso che il minimo indispensabile per gestire correttamente l'autenticazione sia:
- email (l'identificatore univoco di accesso)
- salt (ovviamente!)
- password (duh)
- lostToken (un hash per verificare la funzionalità della password smarrita)
- ruolo (membro, amministratore, editor, ecc. IMO questo elenco di ruoli sarebbe diverso tra i siti, tuttavia è troppo importante per il modello utente non avere qui?)
Ora entriamo in altri campi interessanti che sono ancora molto utili:
- createdAt (quando l'account è stato creato)
- ipAddress (traccia l'IP quando è stato creato l'account)
- refererUrl (da quale sito proviene)
- lastLoggedIn (l'ultima volta che l'utente ha effettuato l'accesso)
- isOnline (è l'utente attualmente online)
E ancora più campi che sono ancora piuttosto utili:
- nome utente (potrebbe non essere utilizzato su ogni sito)
- numero di accessi consecutivi (simile alla rete dello stack)
Penso che qualsiasi altra cosa come i dati sociali (Mi piace, voti, viste del profilo), distintivi / risultati, l'ultima volta che hanno aggiornato il loro profilo / account / qualsiasi cosa, e altre informazioni come il loro nome appartengono al modello Profilo per sito.
Che ne pensi?
Modifica: Capisco perfettamente che questa domanda è in parte soggettiva, ma penso che ci sia sicuramente spazio per la discussione.