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