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