Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> odzyskiwanie hasła na e-mail a link
inomi13
post
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".
  1. $_SESSION['name'] = $wiersz['name'];
  2. $wynik= $polaczenie->query("SELECT pass from persons where email='$email'");
  3. $wiersz = $wynik->fetch_assoc();
  4. $wiersz['pass'] = str_shuffle("qwertyuiopasdfghjklzxcvbnm1234567890");
  5. $wiersz['pass'] = substr($wiersz['pass'],0,20);
  6. $haslo1=$wiersz['pass'];
  7. $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
  8. $zmiana = "UPDATE persons SET pass = '$haslo_hash', pass_temp = '$haslo_hash' WHERE email='$email'";


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

  1. require_once "connect.php";
  2. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  3. $wynik= $polaczenie->query("SELECT user from persons where pass=pass_temp");
  4. $wiersz = $wynik->fetch_assoc();
  5. if(empty($wiersz["user"]))
  6. {
  7. header('Location: index.php');
  8. exit();
  9. }
  10. else
  11. {
  12. if(isset($_POST['ok']))
  13. {
  14.  
  15. $wszystko_OK=true;
  16. $user=$wiersz["user"];
  17. $haslo = $_POST['haslo'];
  18. $haslo1 = $_POST['haslo1'];
  19. $haslo2 = $_POST['haslo2'];
  20.  
  21.  


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dublinka
post
Post #2





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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 02:18