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