Pewnego razu napisałem historyjkę odnośnie aktywacji konta w serwisie pewnej osobie i myślę, że jak umiesz czytać ze zrozumieniem to masz... gotowca ;) bo przerobienie tego na zmianę hasła będzie proste.
Napiszmy sobie może małą historyjkę ( Uppercase to Ważne funkcje które są podstawą funkcjonowania Twojej domeny )
Jesteś sobie Ania.
I jako wesoła Ania chcesz SIĘ ZAREJESTROWAĆ na stronie swojej koleżanki.
Więc wypełniasz odpowiednie dane w formularzu rejestracyjnym.
Włącznie z PRAWIDŁOWYM adresem MAIL, LOGINEM, HASŁEM, datą urodzenia, hobby, płcią.
Niestety strona koleżanki wymaga abyś potwierdziła swoją rejestrację poprzez : KLIKNIĘCIE w WYGENEROWANY LINK AKTYWACYJNY który przyszedł Ci na MAILA.
Zatem wchodzisz w swoją skrzynkę pocztową. Widzisz w niej wiadomość z serwisu koleżanki która wygląda mniej więcej tak:
Witaj ANIU!
Aby móc aktywować swoje konto w moim serwisie kliknij proszę w link poniżej:
http://strona.kolezanki.pl/activate/311/4289c23c311c31c131c44421af31ff314/
Pozdrawiamy!
Po kliknięciu na link powinnaś zostać poinformowana iż Twoje konto ZOSTAŁO AKTYWOWANE i możesz się zalogować.
Teraz wyciągnijmy wnioski z tej historii co tu można się dowiedzieć.
A to tak
tabela z userami musi na 100% zawierać pole z id usera, mailem, z zaszyfrowanym hasłem, z loginem, kodem aktywacyjnym, polem typu bool czy aktywny jest dany user , domyślnie NIE.
Co można zrobić przy rejestracji?
A no proste.
Sprawdzamy czy wszystkie pola się zgadzają. Generujemy unikalny kod.
Takie generowanie kodu można zrobić za pomocą np random_bytes ( YAY PHP7! )http://php.net/manual/en/function.random-bytes.php#refsect1-function.random-bytes-examples od 20 np.
Mając wygenerowany unikalny kod... mamy już wszystko i możemy dodać go do bazy.
Co można zrobić przy aktywacji?
Jak widzisz wchodzisz przez link /activate/311/randomCode
Co można się dowiedzieć z tego?
- 311 to id usera w bazie
- randomCode to kod który jest w bazie
A więc znowu proste.
filtrujesz parametr id i parametr od randomCode.
Następnie z bazy pobierasz tylko kod, czy_aktywny na podstawie jego id .
I teraz jeżeli kod który pobrałaś zgadza się z kodem który user przesłał i jest on nieaktywny to..
Zmieniasz mu status na aktywny
Dziękujesz ładnie za zarejestrowanie.
Przenosisz do logowania.
- Maile -> ShiftMailer
- Kod HTML -> Twig ( szablony )
- random_bytes -> https://3v4l.org/D30gq#v704
U Ciebie byłaby taka zmiana, że po prostu masz link unikalny do usera i pokazujesz mu formularz zmiany hasła. Więc formularz zmiany hasła to powinien być osobny moduł :)
PS: Ja tak sobie projektuje apki zanim siądę do kodu. Dobry kod to taki, który jak czytasz to opowiada pewną historię..