Token aktywacyjny - sposób przechowywania

0

Mam takie pytanie, mam w aplikacji coś takiego, że załóżmy zakładam sobie konto i jest nieaktywne, a link aktywacyjny przychodzi np na email. Zastanawiam się jak zaprojektować generowanie tego tokenu, żeby uniknąć dodawania kolumny(tj pola) do całego Entity.

Bo skoro ma być używane tylko raz, przy rejestracji (ew pozniej przy ponawianiu wysyłania tokena), po co tym zaśmiecać bazę? Znacie jakiś sposób żeby uniknąć tego?

Myślałem nad generowaniem tokena - w przypadku konta uzytkownika - z jego jakichś danych np imienia, nazwiska itp. Tylko ma to minusy bo np nie będe mógł generować nowego(innego) tokena jak będzie potrzebny

Możnaby też manualnie zrobic tabele, albo osobne entity które miałoby ID użytkownika i token - ale tego też próbuje uniknąć. being lightweight matters :D

Jakiś pomysł?

0

Wszystkie aplikacje, które widziałem używały ostatniego sposobu, ale też jestem ciekawy czy ktoś się spotkał z czymś mądrzejszym.

0

lol,piźnij se jakiś serwis, trzymaj se tam AtomicInteger i za każdym razem generuj jakiś totalnie losowy ciąg znaków na podstawie tej liczby - nawet synchronizować nie musisz(bo jest dodawanie tutaj jest czynnością atomową - nie, nie chodzi o to że promieniuje).

A, faktycznie, pytał się gdzie przechowywać,

"being lightweight matters " - z leksza bulszit, bo zamiast wrzucić to do tabeli to kombinujesz na lewo. bez sensu. Jak już chcesz być taki purytański - to ewentualnie możesz mieć tabele z tokenem i flagę w userze - czy został aktywowany - domyślnie false, generujesz token, wkładasz rekord, potem przy wchodzeniu na link, zmieniasz flagę i wywalasz token

1

Jeżeli ma to być jednorazowa operacja to można pokusić się o użycie jakiegoś prostego hasha ze znanych danych (Login, email, cokolwiek) z oznaczeniem za pomocą timestampu. Każda prośba o token będzie opierać się o aktualny czas co zapewni unikalność tworzonych tokenów i jednocześnie nie trzeba ich trzymać w bazie na stałe. Oczywiście powraca problem tego jak i gdzie przechowywać czas, ale to można zrobić tworząc niewielką tabelę pośrednią z id usera i aktualnymi czekającymi tokenami:

class WaitingToken{

   private User user; 

   private LocalDateTime sendTime;

   public Hash hash(){
      // twoja implementacja
   }
}

Weryfikacja tokena usuwa go z bazy. Finalnie masz listę tokenów czekających na aktywację.

0

czyli nic ciekawszego niż przechowywanie tokena w jakiejś tabeli się nie znajdzie? szkoda.. ;)
tak też zrobiłem, osobną tabele, jakiś service do działania na tej tabeli i teraz próbuje to scalić jakoś logicznie

0

Zamiast fizycznej tabeli możesz użyć jakiegoś prostego cacha/in-memory.

1 użytkowników online, w tym zalogowanych: 0, gości: 1