PHP email Verification
shrnutí: v tomto tutoriálu se dozvíte, jak bezpečně ověřit e-mailovou adresu nového účtu pomocí aktivačního odkazu.
Úvod do ověření e-mailu PHP pro nové účty
v předchozích tutoriálech jste se naučili, jak vytvořit registrační formulář, který umožňuje uživatelům registrovat se k účtům. A také jste se naučili, jak vytvořit přihlašovací formulář, který uživatelům umožní přihlásit se pomocí uživatelského jména a hesla.
když se uživatelé zaregistrují pro nové účty, zadávají své e-mailové adresy. Uživatelé však mohou zadat libovolnou e-mailovou adresu, protože systém e-mail neověřuje.
Chcete-li ověřit e-mailové adresy uživatelů, můžete na tyto e-mailové adresy poslat ověřovací e-mail a požádat uživatele, aby otevřeli své e-maily a klikli na aktivační odkaz.
Chcete-li to provést, postupujte podle následujících kroků při registraci účtů uživatelů:
- Vygenerujte jedinečný aktivační kód a nastavte dobu expirace, například jeden den.
- Uložte uživatelský záznam do databáze a označte stav uživatele jako neaktivní. Také uložte hash aktivačního kódu & doba vypršení platnosti.
- pošlete e-mail s aktivačním odkazem na e-mailovou adresu uživatele. Aktivační odkaz bude obsahovat e-mailovou adresu a aktivační kód, např.,
https://app.com/activate.php?email=email&activation_code=abcd
- Informujte uživatele o aktivaci účtu e-mailem.
hashování aktivačního kódu zajišťuje, že účet může aktivovat pouze uživatel, který vlastní e-mailovou adresu, nikoli kdokoli jiný, dokonce i správce, který má přístup k databázi.
pokud uživatelé neaktivovali účet, nebudou se moci přihlásit.
když uživatelé kliknou na aktivační odkaz v e-mailu, musíte provést následující kroky:
- dezinfikujte a ověřte e-mail a aktivační kód.
- Najděte neaktivního uživatele s e-mailovou adresou. Pokud žádný uživatelský záznam neexistuje, přesměrujte na registrační formulář.
- pokud existuje uživatelský záznam a platnost aktivačního kódu vypršela, odstraňte uživatelský záznam z databáze a přesměrujte jej do registračního formuláře.
- v opačném případě porovnejte aktivační kód s hash aktivačního kódu uloženého v databázi. Pokud se shodují, označte uživatelský záznam jako aktivní a přesměrujte na přihlašovací stránku.
znovu vytvořte tabulku uživatelů
nejprve přetáhněte tabulku users
z databáze auth
:
Code language: SQL (Structured Query Language) (sql)
za druhé vytvořte tabulku users
s novými sloupci active
, activation_code
, activation_at
, activation_expiry
:
Code language: SQL (Structured Query Language) (sql)
následující text vysvětluje význam nových sloupců.
výchozí hodnota sloupce active
je 0. To znamená, že uživatelé, kteří se zaregistrují k účtům, ale neověřili své e-mailové adresy, budou ve výchozím nastavení neaktivní.
sloupec activation_code
uloží hash aktivačního kódu. Jeho délka by měla být dostatečná pro uložení řetězce vráceného funkcí password_hash()
.
je důležité si uvědomit, že hash bude zkrácen, pokud sloupec activation_code
nemá dostatečně dlouhou velikost. Způsobí to, že funkce password_verify()
neodpovídá aktivačnímu kódu s hash.
sloupec activation_expiry
ukládá čas vypršení platnosti pro použití aktivačního kódu před vypršením platnosti. Doba vypršení platnosti zajišťuje, že aktivační kód nelze použít, pokud je e-mailová adresa Po uplynutí doby platnosti ohrožena.
sloupec activated_at
ukládá datum a čas, kdy uživatelé aktivují své účty.
Struktura projektu
podívejme se na aktuální strukturu projektu před přidáním funkcí Ověření e-mailu:
Code language: PHP (php)
upravte funkce v auth.php soubor
následující přidá aktivační kód a parametr expirace do funkce register_user()
. Ve výchozím nastavení je doba expirace jeden den (1 * 24 * 60 * 60
).
Code language: PHP (php)
funkce register_user()
používá funkci password_hash()
k hašování aktivačního kódu.
funkce find_user_by_username()
obsahuje ve výsledku sloupec active
:
Code language: PHP (php)
následující text definuje novou funkci is_user_active()
, která vrací true, pokud je uživatel aktivní:
Code language: PHP (php)
funkce login()
by měla umožnit přihlášení pouze aktivním uživatelům:
Code language: PHP (php)
Definujte funkce, které se zabývají ověřením e-mailu
přidáme funkce, které se zabývají ověřením e-mailu do souboru auth.php
.
nejprve vytvořte nový soubor app.php
ve složce config
a definujte následující konstanty:
Code language: PHP (php)
tyto konstanty použijeme pro zasílání aktivačních e-mailů uživatelům. Chcete-li použít tyto konstanty, musíte do souboru bootstrap.php
zahrnout soubor app.php
:
Code language: PHP (php)
za druhé, definujte funkci, která generuje jedinečně náhodný aktivační kód:
Code language: PHP (php)
za třetí definujte funkci, která odešle ověření e-mailu s aktivačním odkazem.
Code language: PHP (php)
Předpokládejme, že adresa URL aplikace je http://localhost/auth
, adresa URL aktivace bude vypadat takto:
Code language: PHP (php)
funkce send_activation_email()
používá vestavěnou funkci mail()
pro odesílání e-mailů.
Začtvrté definujte funkci, která odstraní uživatele podle id a stavu. Ve výchozím nastavení odstraní neaktivního uživatele podle id.
Code language: PHP (php)
Za páté, definujte funkci, která najde neověřeného uživatele e-mailem a aktivačním kódem. Pokud aktivační kód Vypršel, funkce také odstraní uživatelský záznam voláním funkce delete_user_by_id()
.
Code language: PHP (php)
Za šesté definujte novou funkci activate_user()
, která aktivuje uživatele pomocí id:
Code language: PHP (php)
upravte registr.stránka php
src/register.php
musí obsahovat logiku, aby zvládla logiku ověření e-mailu.
Code language: PHP (php)
jak to funguje.
nejprve Vygenerujte aktivační kód:
Code language: PHP (php)
za druhé, zaregistrujte uživatele pomocí aktivačního kódu:
Code language: PHP (php)
za třetí, pošlete e-mail na e-mailovou adresu uživatele voláním funkce send_activation_email()
:
Code language: PHP (php)
nakonec přesměrujte uživatele na přihlašovací stránku a zobrazte zprávu flash, která požádá uživatele o aktivaci účtu e-mailem:
Code language: PHP (php)
Vytvořte aktivovat.php page
Chcete-li umožnit uživatelům aktivovat své účty po registraci, můžete vytvořit novou stránku activate.php
ve složce public
a použít následující stránku:
Code language: PHP (php)
jak aktivovat.php funguje.
nejprve dezinfikujte a ověřte e-mail a aktivační kód:
Code language: PHP (php)
za druhé, najděte neověřeného uživatele na základě e-mailu a ověřovacího kódu, pokud neexistují žádné chyby ověření. find_unverified_user()
také smaže neověřeného uživatele, pokud vypršela doba vypršení platnosti.
Code language: PHP (php)
za třetí aktivujte uživatele a přesměrujte na přihlašovací údaje.php stránky:
Code language: PHP (php)
nakonec přesměrujte na registration.php
, pokud dojde k chybě:
Code language: PHP (php)
v tomto tutoriálu jste se naučili, jak implementovat ověření e-mailu pro uživatelské účty v PHP.
Leave a Reply