odzyskiwanie hasła na e-mail a link |
odzyskiwanie hasła na e-mail a link |
24.07.2019, 13:12:42
Post
#1
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Stworzyłem formularz odzyskiwania hasła który wysyła na skrzynkę e-mailową nowe hasło a w bazie danych dodaje taki sam wpis w tabeli "pass_temp".
Osoba która otrzymuje e-maila klika w link "zmiana hasła" i może odrazu wpisać tymczasowe hasło, nowe i powtórzenie nowego hasła. Wszystko działa jednak jest problem w sytuacji jak dwie osoby w tym samym czasie chciały by odzyskać hasło. Proszę o jakieś sugestie
|
|
|
24.07.2019, 13:21:26
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Twoje założenie jet w pewnym sensie słuszne bo zakłada że ostatnia próba jest tą poprawną. Ale jeśli chcesz wykonać jedną z wielu to możesz stworzyć nową tabelkę przechowującą te tymczasowe hasła + id usera i np po poprawnej weryfikacji skasować resztę.
-------------------- |
|
|
24.07.2019, 13:28:44
Post
#3
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Kod tak działa że w momencie ustawienia nowego hasła w tabeli "pass_temp" zostanie wpisana pusta wartość
|
|
|
24.07.2019, 14:03:47
Post
#4
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
skąd taka teza
-------------------- |
|
|
24.07.2019, 14:07:44
Post
#5
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
Tak jak mówię, problem jest w momencie jak dwie osoby wygenerowały by procedurę odzyskiwania hasła na e-maila bo wtedy kod zwróci dwie osoby
Nie mam pomysłu jak rozwiązać ten problem. |
|
|
24.07.2019, 14:14:40
Post
#6
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
obawiam sie ze nie qmam.
"Tak jak mówię, problem jest w momencie jak dwie osoby wygenerowały by procedurę odzyskiwania hasła na e-maila bo wtedy kod zwróci dwie osoby" Nie rozumiem tego. Moze wyjasnisz o co ci chodzi. Nie ma znaczenia ile osob generuje taka procedure. Odwolujesz sie do konkretnego rekordu. Nie kumam dlaczego mialoby to kolidowac z innymi userami. Po kiego grzyba user ma podawac tymczasowe haslo i nowe haslo ? Wygeneruj na samym poczatku (rejestracja) jakies haslo -> zapisz do bazy. Czyli login, email, haslo costam co chcesz jeszcze. Oczywiscie powinienes podczas rejestracji zrobic opcje walidacji poprzez email i wtedy dwie tabele z czego jedna na tymczasowe dane i tutaj nalezy dodac pole na TIMESTAMP+czas na walidacje. W mo,mencie kiedy user w ciagu tego czasu kliknie pobieraz dane z linku (jakiestam co chcesz) i teraz laczysz sie z tabelą, pobierasz / sprawdzasz danei i dodajesz do konkretnej ., drugiej tabeli a z tej tymczasowej usuwasz wpis. Jesli uzytkownik nie kliknie w link w przeciagu tego czasu link wygasa -> dodac musisz mechanizm usuniecia automatycznego w momencie sprawdzenia i rowniez gdzies osadzic w innym pliku taki mechanizm. Podczas kazdorazowego wywolania przez userow skrypt bedzie sprawdzal czy czas w tabeli 'tmp' jest mniejszy od aktualnego i jesli tak usuwaj wszystko to co jest 'stare' Teraz uzytkownik ma opcje zmiany hasla. Po zalogowaniu uzyj sesji jako nazwe usera i pobierz dane z tabeli gdzie trzymasz dane: login, haslo, email..... Wtedy WHERE user='$user' (zakladajac ze masz blokade powielania nazw takich samych loginow podczas rejestracji) Wyswietlasz formularz z dwoma polami do wpisania nowego hasla (opcjonalnie pole na stare haslo) i zapisujesz. tyle. Oczywiscie to w duzym skrucie bo trzeba zwalidowac wszystko po kolei. Ten post edytował dublinka 24.07.2019, 16:35:08 -------------------- |
|
|
24.07.2019, 20:33:05
Post
#7
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 0 Dołączył: 16.08.2017 Ostrzeżenie: (0%) |
W przypadku zapomnienia hasła użytkownik wpisuje adres e-mail i dostaje nowe zahaszowane hasło na emaila. Chciał bym tak zrobić żeby użytkownik po otrzymaniu emaila z hasłem kliknął w link „zmiana hasła” i mógł od razu wpisać otrzymane hasło, nowe swoje hasło i powtórzenie swojego hasła. Teraz do działa ale najpierw użytkownik musi zalogować się otrzymanym tymczasowym hasłem aby mógł sobie zmienić hasło. Wymyśliłem ze w momencie generacji nowego hasła które jest wysyłane do użytkownika tworzy wpis w kolumnie pass oraz pass_temp i na tej podstawie sprawdzam jeżeli pass=pass_temp to wyświetl usera i ta procedura działa tylko problem pojawia się w momencie jeżeli kilka osób chciało by odzyskać hasło w tym samym momencie.
|
|
|
25.07.2019, 07:34:09
Post
#8
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
Dlaczego jest z tym problem? Podaj przyklad bo dalej nie kumam.
Mozna to prosciej zrobic. Uzytkownik wpisuje adres email w pole txt. Klika dalej. W momencie wygenerowania tymczasowego hasla slesz email do usera z danymi. Tyle. Nie trzeba tutaj mieszac jakis tymczasowych hasel itp. W tym samym momencie zmieniasz haslo uzytkownika na haslo wlasnie wygenerowane. To co opisujesz to opcja zmiany hasla ktoa powinna byc dostepna bedac zalogowanym Wtedy slesz emaila z parametrami (jakis hasz ktory jest w bazie i email w adresie do weryfikacji) ustawiasz zywotnosc linku, dodajesz tymczasowe wpisy itp. Ten post edytował dublinka 25.07.2019, 08:37:01 -------------------- |
|
|
29.07.2019, 16:53:48
Post
#9
|
|
Grupa: Zarejestrowani Postów: 515 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%) |
strasznie to zagmatwane.
w ogóle po co jakieś tymczasowe hasło ? skoro - jak sam piszesz, użytkownik i tak je zmieni zaraz po zalogowaniu User zapomniał hasła, klika w przycisk "resetuj hasło" i wpisuje adres email lub login dla którego ma zostać wysłany email z linkiem. Link powinien zawierać token po którym strona zweryfikuje że ten użytkownik chce zmienić hasło, moze to wyglądać np: www.jakastrona.pl/passreset?user=bolek&&token=idhasd12898sd9adjasd9022j1nndsa to najprostsza wersja. Token generujesz haszując np email, login lub inne stałe dane użytkownika + sól. Klikając w link strona weryfikuje czy użytkownik istnieje, generuje token wg tego samego schematu co podczas tworzenia linka i porównujesz czy się zgadza. Jeśli jest ok, wyświetla formularz zmiany hasła gdzie podaje się już tylko nowe hasło i tyle. można też zrobić oddzielną tablicę która zawiera tylko tokeny (przykładowa struktura: [id, userID, token, date]), łączysz ją relacją z tablicą users. Wtedy link mógłby już wyglądać tak: www.jakastrona.pl/passreset?token=idhasd12898sd9adjasd9022j1nndsa Plus jest taki że hash za każdym razem może być inny, bo masz go zapisanego w bazie. Po kliknięciu w link, sprawdzasz czy token istnieje w bazie i pobierasz dane użytkownika do którego został przypisany. Reszta bez zmian, jeśli jest ok, wyświetlasz formularz w którym user wpisuje nowe hasło. Jeśli chodzi o usuwanie wygasłych tokenów to w tym konkretnie przypadku możesz śmiało wykonywać to przed każdym sprawdzeniem tokena - cronjob nie ma sensu do takiego prostego zadania. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 03:32 |