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