PHP Email Verification

Összegzés: ebben az oktatóanyagban megtudhatja, hogyan ellenőrizheti biztonságosan az Új fiók e-mail címét egy aktiválási link segítségével.

Bevezetés Az új fiókok PHP e-mail ellenőrzésébe

a korábbi oktatóanyagokban megtanultad, hogyan lehet létrehozni egy regisztrációs űrlapot, amely lehetővé teszi a felhasználók számára a fiókok regisztrálását. Azt is megtanulta, hogyan kell létrehozni egy bejelentkezési űrlapot, amely lehetővé teszi a felhasználók számára, hogy a felhasználónevet és a jelszót használják a bejelentkezéshez.

amikor a felhasználók új fiókokra regisztrálnak, megadják e-mail címüket. A felhasználók azonban bármilyen e-mail címet megadhatnak, mert a rendszer nem ellenőrzi az e-maileket.

a felhasználók e-mail címeinek ellenőrzéséhez küldhet ellenőrző e-mailt ezekre az e-mail címekre, kérheti a felhasználókat, hogy nyissák meg e-mailjeiket, majd kattintsanak egy aktiválási hivatkozásra.

ehhez kövesse az alábbi lépéseket, amikor a felhasználók regisztrálják a fiókokat:

  • hozzon létre egy egyedi aktiválási kódot, és állítsa be a lejárati időt, például egy napot.
  • mentse el a felhasználói rekordot az adatbázisba, és jelölje meg a felhasználó állapotát inaktívként. Ezenkívül mentse el az aktiválási kód kivonatát & lejárati idő.
  • küldjön egy e-mailt az aktiválási linkkel a felhasználó e-mail címére. Az aktiválási link tartalmazza az e-mail címet és az aktiválási kódot, pl., https://app.com/activate.php?email=email&activation_code=abcd
  • tájékoztassa a felhasználót a fiók aktiválásáról e-mailben.

az aktiválási kód kivonatolása biztosítja, hogy csak az e-mail cím tulajdonosa aktiválhatja a fiókot, senki más, még az adminisztrátor sem, aki hozzáférhet az adatbázishoz.

ha a felhasználók nem aktiválták a fiókot, akkor nem tudnak bejelentkezni.

amikor a felhasználók az e-mailben található aktiválási linkre kattintanak, a következő lépéseket kell végrehajtania:

  • fertőtlenítse és érvényesítse az e-mail és az aktiválási kódot.
  • keresse meg az inaktív felhasználót az e-mail címmel. Ha nincs felhasználói rekord, irányítsa át a regisztrációs űrlapot.
  • ha létezik felhasználói rekord, és az aktiválási kód lejárt, törölje a felhasználói rekordot az adatbázisból, és irányítsa át a regisztrációs űrlapra.
  • ellenkező esetben illessze az aktiválási kódot az adatbázisban tárolt aktiválási kód hash-jával. Ha megegyeznek, jelölje meg a felhasználói rekordot aktívként, majd irányítsa át a bejelentkezési oldalra.

hozza létre újra a felhasználók táblát

először dobja ki a users táblát a auth adatbázisból:

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

másodszor hozza létre a users táblát az új oszlopokkal active, activation_code, activation_at, activation_expiry:

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

az alábbiakban bemutatjuk az új oszlopok jelentését.

a active oszlop értéke alapértelmezés szerint 0. Ez azt jelenti, hogy azok a felhasználók, akik regisztrálnak fiókokra, de nem igazolták e-mail címüket, alapértelmezés szerint inaktívak lesznek.

a activation_code oszlop tárolja az aktiválási kód kivonatát. Hosszának elegendőnek kell lennie a password_hash() függvény által visszaadott karakterlánc tárolásához.

fontos megjegyezni, hogy a hash csonkolódik, ha a activation_code oszlopnak nincs elég hosszú mérete. Ez azt eredményezi, hogy a password_verify() függvény nem felel meg az aktiválási kódnak a kivonattal.

a activation_expiry oszlop tárolja az aktiválási kód lejárati idejét a lejárat előtt. A lejárati idő biztosítja, hogy az aktiválási kód nem használható, ha az e-mail cím veszélybe kerül a lejárati idő után.

a activated_at oszlop tárolja a dátumot és az időt, amikor a felhasználók aktiválják a fiókjukat.

Projektstruktúra

az e-mail ellenőrzési funkciók hozzáadása előtt nézzük át a jelenlegi projektstruktúrát:

Code language: PHP (php)

módosítsa a funkciókat auth-ban.php fájl

az alábbiakban az aktiválási kódot és a lejárati paramétert adjuk hozzá a register_user() függvényhez. Alapértelmezés szerint a lejárati idő egy nap ( 1 * 24 * 60 * 60).

Code language: PHP (php)

a register_user() függvény a password_hash() függvényt használja az aktiválási kód kivonására.

a find_user_by_username() függvény a active oszlopot tartalmazza az eredményben:

Code language: PHP (php)

az alábbiakban egy is_user_active() új függvényt definiálunk, amely true értéket ad vissza, ha egy felhasználó aktív:

Code language: PHP (php)

a login() funkciónak csak az aktív felhasználók számára kell lehetővé tennie a bejelentkezést:

Code language: PHP (php)

határozza meg az e-mail ellenőrzéssel foglalkozó funkciókat

az e-mail ellenőrzéssel foglalkozó funkciókat hozzáadjuk a auth.php fájlhoz.

először hozzon létre egy új app.php fájlt a config mappában, és adja meg a következő állandókat:

Code language: PHP (php)

ezeket az állandókat arra használjuk, hogy aktiváló e-maileket küldjünk a felhasználóknak. Ezen állandók használatához a app.php fájlt bele kell foglalni a bootstrap.php fájlba:

Code language: PHP (php)

másodszor, definiáljon egy függvényt, amely egyedileg véletlenszerű aktiválási kódot generál:

Code language: PHP (php)

harmadszor, határozzon meg egy olyan funkciót, amely e-mail ellenőrzést küld egy aktiválási linkkel.

Code language: PHP (php)

tegyük fel, hogy az alkalmazás URL-je http://localhost/auth, az aktiválási URL így fog kinézni:

Code language: PHP (php)

az send_activation_email() funkció a beépített mail() funkciót használja e-mailek küldésére.

negyedszer, definiáljon egy függvényt, amely azonosító és állapot alapján törli a felhasználót. Alapértelmezés szerint az inaktív felhasználót azonosító alapján törli.

Code language: PHP (php)

ötödször, adjon meg egy függvényt, amely e-mailben és aktiválási kóddal talál meg egy nem ellenőrzött felhasználót. Ha az aktiválási kód lejárt, a funkció a delete_user_by_id() funkció hívásával törli a felhasználói rekordot is.

Code language: PHP (php)

hatodik, adjon meg egy új activate_user() funkciót, amely egy azonosítóval aktiválja a felhasználót:

Code language: PHP (php)

módosítsa a nyilvántartást.php oldal

a src/register.php – nak bele kell foglalnia a logikát az e-mail ellenőrzési logika kezeléséhez.

Code language: PHP (php)

hogyan működik.

először hozzon létre egy aktiválási kódot:

Code language: PHP (php)

másodszor, regisztrálja a felhasználót az aktiválási kóddal:

Code language: PHP (php)

harmadszor, küldjön egy e-mailt a felhasználó e-mail címére a send_activation_email() funkció hívásával:

Code language: PHP (php)

végül irányítsa át a felhasználót a bejelentkezési oldalra, és jelenítsen meg egy flash üzenetet, amely kéri a felhasználót, hogy aktiválja a fiókot e-mailben:

Code language: PHP (php)

hozza létre az aktiválást.php oldal

annak érdekében, hogy a felhasználók a regisztráció után aktiválhassák fiókjukat, létrehozhat egy új activate.php oldalt a public mappában, és használhatja a következő oldalt:

Code language: PHP (php)

hogy az activate.php működik.

először fertőtlenítse és érvényesítse az e-mailt és az aktiválási kódot:

Code language: PHP (php)

másodszor, keresse meg a nem ellenőrzött felhasználót az e-mail és az ellenőrző kód alapján, ha nincsenek érvényesítési hibák. A find_unverified_user() a nem ellenőrzött felhasználót is törli, ha a lejárati idő lejárt.

Code language: PHP (php)

harmadszor, aktiválja a felhasználót, és irányítsa át a bejelentkezést.php oldal:

Code language: PHP (php)

végül átirányítja a registration.php ha hiba van:

Code language: PHP (php)

ebben az oktatóanyagban megtanulta, hogyan valósíthatja meg a felhasználói fiókok e-mail ellenőrzését a PHP-ben.

Leave a Reply