Być może źle interpretuję pytanie, ale chyba jest ono niezależne od konkretnej technologii? Bardziej pasuje do działu Inżynieria Oprogramowania
.
Sam jakiś czas temu musiałem coś takiego zaimplementować. Przy tworzeniu nowego użytkownika tworzę również obiekt UserVerificationToken
który przechowuje między innymi takie właściwości:
public string Token { get; }
public string TemporaryPassword { get; }
public int VerificationAttempts { get; private set; }
Gdzie Token to właśnie unikalny token identyfikujący weryfikację danego użytkownika. Kiedy użytkownik dostaje maila to jest w nim link z tokenem. Po kliknięciu w link otwiera się strona w SPA (Blazor w tym przypadku) gdzie użytkownik musi podać tymczasowe hasło, jak i wpisać nowe (i potwierdzić). Wysyłam request do specjalnego endpointu w API który weryfikuje podane dane, ustawia użytkownikowi hasło i gotowe. Tymczasowe hasło jest oczywiście przechowywane jako hash w bazie danych.
Co ważne, to przy regularnym logowaniu, konto użytkownika jest sprawdzane właśnie pod kątem pozytywnej weryfikacji. Użytkownik który próbuje się zalogować a nie ma zweryfikowanego konta jest odrzucany. To czy użytkownik jest zweryfikowany w moim przypadku sprawdzam bardzo łatwo- nowo utworzeni użytkownicy po prostu nie mają hasła. Jeśli nie ma hasła, to znaczy że nie przeszedł weryfikacji i nie może się zalogować.