Non esiste un modo giusto o sbagliato di implementare questo nel database, tutto dipende dalle tue esigenze.
Normalmente, la conferma della registrazione tramite e-mail viene effettuata per convalidare l'indirizzo e-mail dell'utente. Il reparto marketing desidera assicurarsi che quando inviano campagne di marketing, tali campagne raggiungano effettivamente la posta in arrivo di qualcuno :). Altri motivi per convalidare l'e-mail è assicurarsi che se l'utente dimentica la sua password, hai un canale su cui puoi inviare un token di reset.
Se la chiave di registrazione viene utilizzata solo per convalidare l'email dell'utente, non è nemmeno necessario memorizzarla da qualche parte, ma solo generarla dai dati dell'utente:
a = user id in the database;
b = user email;
c = timestamp of registration;
d = number of hours (or days) that the confirmation key is valid;
e = any other unique things of the user
confirmationKey = sha1(concat(a, b, c, d, e))
Invii quindi all'utente questa chiave di conferma nell'e-mail, e quando lui risponde, rigenera l'hash e lo abbina a quello che l'utente ha inviato. Se l'hash corrisponde, verifichi se il tempo in cui l'utente ha confermato la registrazione è inferiore a c + d
. Se sì, allora il token è valido e non è ancora scaduto. Ovviamente è necessario assicurarsi che la chiave di conferma non possa essere indovinata da nessuno e campi come c
aiuto in tal senso. Hai un'idea ...
Ora non è necessario memorizzare nulla in un database ... a meno che non sia necessario rispondere a domande sulla procedura di registrazione, ad esempio:
- quanti utenti hanno effettivamente confermato dopo la registrazione? Forse alcuni di quelli che non hanno confermato sono i bot?
- quanto tempo impiegano solitamente gli utenti per confermare la registrazione?
- per quanti utenti è stata rilasciata la chiave di conferma prima che confermassero effettivamente?
- etc
Dopo aver individuato le domande a cui hai bisogno di rispondere (se ce ne sono), saprai anche cosa devi memorizzare nel database e come.