weryfikacja poczty e-mail w PHP

Podsumowanie: w tym samouczku dowiesz się, jak bezpiecznie zweryfikować adres e-mail nowego konta za pomocą linku aktywacyjnego.

Wprowadzenie do weryfikacji poczty e-mail w PHP dla nowych kont

w poprzednich samouczkach nauczyłeś się, jak utworzyć formularz rejestracyjny, który umożliwia użytkownikom rejestrację kont. Nauczyłeś się również, jak zbudować formularz logowania, który umożliwi użytkownikom korzystanie z nazwy użytkownika i hasła do logowania.

gdy użytkownicy rejestrują nowe konta, wpisują swoje adresy e-mail. Użytkownicy mogą jednak wprowadzić dowolny adres e-mail, ponieważ system nie weryfikuje poczty e-mail.

aby zweryfikować adresy e-mail użytkowników, możesz wysłać e-mail weryfikacyjny na te adresy e-mail i poprosić użytkowników o otwarcie wiadomości e-mail i kliknięcie łącza aktywacyjnego.

aby to zrobić, wykonaj następujące kroki, gdy użytkownicy rejestrują konta:

  • Wygeneruj unikalny kod aktywacyjny i ustaw czas wygaśnięcia, np. jeden dzień.
  • Zapisz rekord użytkownika w bazie danych i oznacz status użytkownika jako nieaktywny. Zapisz również hash kodu aktywacyjnego &czas wygaśnięcia.
  • wyślij e-mail z linkiem aktywacyjnym na adres e-mail użytkownika. Link aktywacyjny będzie zawierał adres e-mail oraz kod aktywacyjny, np., https://app.com/activate.php?email=email&activation_code=abcd
  • poinformuj użytkownika o aktywacji konta za pośrednictwem poczty elektronicznej.

zaszyfrowanie kodu aktywacyjnego zapewnia, że tylko użytkownik, który jest właścicielem adresu e-mail, może aktywować konto, a nie ktokolwiek inny, nawet administrator, który ma dostęp do bazy danych.

jeśli użytkownik nie aktywował konta, nie będzie mógł się zalogować.

gdy użytkownicy klikną link aktywacyjny w wiadomości e-mail, musisz wykonać następujące kroki:

  • Dezynfekcja i Walidacja wiadomości e-mail i kodu aktywacyjnego.
  • Znajdź nieaktywnego użytkownika z adresem e-mail. Jeśli Rekord użytkownika nie istnieje, przejdź do formularza rejestracyjnego.
  • jeśli Rekord użytkownika istnieje, a kod aktywacyjny wygasł, Usuń rekord użytkownika z bazy danych i przejdź do formularza rejestracyjnego.
  • w przeciwnym razie dopasuj kod aktywacyjny do skrótu kodu aktywacyjnego przechowywanego w bazie danych. Jeśli się zgadzają, zaznacz Rekord użytkownika jako aktywny i przejdź do strony logowania.

Odtwórz tabelę użytkowników

najpierw usuń tabelę users z bazy danych auth :

Code language: SQL (Structured Query Language) (sql)

po drugie, Utwórz tabelę users z nowymi kolumnami active, activation_code, activation_at, activation_expiry:

Code language: SQL (Structured Query Language) (sql)

poniżej wyjaśniono znaczenie nowych kolumn.

wartość kolumny active domyślnie wynosi 0. Oznacza to, że użytkownicy, którzy zarejestrują się na konta, ale nie zweryfikują swoich adresów e-mail, będą domyślnie nieaktywni.

kolumna activation_code będzie przechowywać Skrót kodu aktywacyjnego. Jego długość powinna być wystarczająca do przechowywania łańcucha zwracanego przez funkcję password_hash().

ważne jest, aby zauważyć, że skrót zostanie obcięty, jeśli kolumna activation_code nie ma wystarczająco długiego rozmiaru. Spowoduje to, że funkcja password_verify() nie dopasuje kodu aktywacyjnego do skrótu.

kolumna activation_expiry przechowuje czas wygaśnięcia, aby użyć kodu aktywacyjnego przed wygaśnięciem. Czas wygaśnięcia zapewnia, że kod aktywacyjny nie może być użyty, jeśli adres e-mail zostanie naruszony po upływie czasu wygaśnięcia.

kolumna activated_at przechowuje datę i godzinę aktywacji Konta przez użytkowników.

struktura projektu

przejrzyjmy aktualną strukturę projektu przed dodaniem funkcji weryfikacji e-mail:

Code language: PHP (php)

Modyfikuj funkcje w auth.plik php

poniżej dodaje kod aktywacyjny i parametr wygaśnięcia do funkcji register_user(). Domyślnie czas wygaśnięcia wynosi jeden dzień (1 * 24 * 60 * 60).

Code language: PHP (php)

funkcja register_user() używa funkcji password_hash() do zahaszowania kodu aktywacyjnego.

funkcja find_user_by_username() zawiera kolumnę active w wyniku:

Code language: PHP (php)

poniżej zdefiniowano nową funkcję is_user_active(), która zwraca true, jeśli użytkownik jest aktywny:

Code language: PHP (php)

funkcja login() powinna umożliwiać logowanie tylko aktywnym użytkownikom:

Code language: PHP (php)

Zdefiniuj funkcje, które zajmują się weryfikacją poczty e-mail

do pliku auth.php dodamy funkcje, które zajmują się weryfikacją poczty e-mail.

najpierw Utwórz nowy plik app.php w folderze config i zdefiniuj następujące stałe:

Code language: PHP (php)

będziemy używać tych stałych do wysyłania e-maili aktywacyjnych do użytkowników. Aby użyć tych stałych, musisz dołączyć plik app.php do pliku bootstrap.php :

Code language: PHP (php)

po drugie, zdefiniuj funkcję, która generuje unikalnie losowy kod aktywacyjny:

Code language: PHP (php)

po trzecie, zdefiniuj funkcję, która wysyła weryfikację e-mail z linkiem aktywacyjnym.

Code language: PHP (php)

Załóżmy, że adres URL aplikacji to http://localhost/auth, adres URL aktywacji będzie wyglądał tak:

Code language: PHP (php)

funkcja send_activation_email() używa wbudowanej funkcji mail() do wysyłania wiadomości e-mail.

po czwarte, zdefiniuj funkcję, która usuwa użytkownika poprzez id i status. Domyślnie usuwa nieaktywnego użytkownika za pomocą identyfikatora.

Code language: PHP (php)

po piąte, zdefiniuj funkcję, która znajdzie niezweryfikowanego użytkownika za pomocą e-maila i kodu aktywacyjnego. Jeśli kod aktywacyjny wygasł, funkcja usuwa również rekord użytkownika, wywołując funkcję delete_user_by_id().

Code language: PHP (php)

po szóste zdefiniuj nową activate_user() funkcję aktywującą użytkownika o id:

Code language: PHP (php)

zmodyfikuj rejestr.strona php

src/register.php musi zawierać logikę obsługi logiki weryfikacji wiadomości e-mail.

Code language: PHP (php)

Jak to działa.

najpierw Wygeneruj kod aktywacyjny:

Code language: PHP (php)

po drugie, zarejestruj użytkownika za pomocą kodu aktywacyjnego:

Code language: PHP (php)

Po Trzecie, wyślij wiadomość e-mail na adres e-mail użytkownika, dzwoniąc do funkcji send_activation_email() :

Code language: PHP (php)

na koniec przekieruj użytkownika na stronę logowania i pokaż komunikat flash z prośbą o aktywację konta za pośrednictwem poczty e-mail:

Code language: PHP (php)

Utwórz aktywację.strona php

aby umożliwić użytkownikom aktywację swoich kont po rejestracji, możesz utworzyć nową stronę activate.php w folderze public i użyć następującej strony:

Code language: PHP (php)

Jak aktywować.PHP działa.

najpierw wyczyść i potwierdź wiadomość e-mail i kod aktywacyjny:

Code language: PHP (php)

po drugie, znajdź niezweryfikowanego użytkownika na podstawie wiadomości e-mail i kodu weryfikacyjnego, jeśli nie ma błędów walidacji. find_unverified_user() usunie również niezweryfikowanego użytkownika, jeśli upłynął czas wygaśnięcia.

Code language: PHP (php)

Po Trzecie, Aktywuj użytkownika i Przekieruj do logowania.strona php:

Code language: PHP (php)

w końcu przekieruj na registration.php jeśli jest błąd:

Code language: PHP (php)

w tym samouczku nauczyłeś się, jak zaimplementować weryfikację poczty e-mail dla kont użytkowników w PHP.

Leave a Reply