PHP e-mailverificatie

samenvatting: in deze tutorial leert u hoe u het e-mailadres van het nieuwe account veilig kunt verifiëren met behulp van een activeringslink.

Inleiding tot de PHP-e-mailverificatie voor nieuwe accounts

in vorige tutorials hebt u geleerd hoe u een registratieformulier maakt waarmee gebruikers zich kunnen registreren voor accounts. En je hebt ook geleerd hoe je een inlogformulier maakt waarmee gebruikers de gebruikersnaam en het wachtwoord kunnen gebruiken om in te loggen.

wanneer gebruikers zich registreren voor nieuwe accounts, voeren ze hun e-mailadressen in. Gebruikers kunnen echter elk e-mailadres invoeren omdat het systeem geen e-mail verifieert.

om de e-mailadressen van gebruikers te verifiëren, kunt u een verificatiemail naar deze e-mailadressen sturen en gebruikers verzoeken hun e-mails te openen en op een activeringslink klikken.

om dit te doen, volgt u de volgende stappen wanneer gebruikers accounts registreren:

  • Genereer een unieke activeringscode en stel een vervaldatum in, bijvoorbeeld één dag.
  • sla het gebruikersrecord op in de database en markeer de status van de gebruiker als inactief. Sla ook de hash van de activeringscode & vervaldatum op.
  • stuur een e-mail met de activeringslink naar het e-mailadres van de gebruiker. De activeringskoppeling bevat het e-mailadres en de activeringscode, bijv., https://app.com/activate.php?email=email&activation_code=abcd
  • Informeer de gebruiker om het account te activeren via e-mail.

Hashing van de activeringscode zorgt ervoor dat alleen de gebruiker die eigenaar is van het e-mailadres het account kan activeren, niet iemand anders, zelfs de beheerder, die toegang heeft tot de database.

als gebruikers geen account hebben geactiveerd, kunnen ze niet inloggen.

wanneer gebruikers op de activeringslink in de e-mail klikken, moet u de volgende stappen uitvoeren:

  • ontsmet en valideer de e-mail en activatiecode.
  • Zoek de inactieve gebruiker met het e-mailadres. Als er geen gebruikersrecord bestaat, ga dan naar het registratieformulier.
  • als er een gebruikersrecord bestaat en de activeringscode is verlopen, verwijdert u het gebruikersrecord uit de database en stuurt u door naar het registratieformulier.
  • anders moet de activeringscode worden vergeleken met de hash van de activeringscode die in de database is opgeslagen. Als ze overeenkomen, markeren de gebruiker record als actief en omleiden naar de login pagina.

maak de gebruikerstabel

maak eerst de users – tabel uit de auth – database:

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

ten tweede, maak de users tabel met de nieuwe kolommen active, activation_code, activation_at, activation_expiry:

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

het volgende verklaart de Betekenis van de nieuwe kolommen.

de waarde van kolom active is standaard 0. Dit betekent dat gebruikers die zich registreren voor accounts, maar hun e-mailadressen niet hebben geverifieerd, standaard inactief zijn.

in de kolom activation_code wordt de hash van de activeringscode opgeslagen. De lengte moet voldoende zijn om de string op te slaan die wordt geretourneerd door de functie password_hash().

het is belangrijk op te merken dat de hash wordt afgekapt als de kolom activation_code niet lang genoeg is. Het zorgt ervoor dat de functie password_verify() niet overeenkomt met de activeringscode met de hash.

de kolom activation_expiry slaat de vervaldatum op om de activeringscode te gebruiken vóór het verstrijken. De vervaldatum zorgt ervoor dat de activeringscode niet kan worden gebruikt als het e-mailadres wordt aangetast na de vervaldatum.

de kolom activated_at slaat de datum en tijd op waarop gebruikers hun accounts activeren.

projectstructuur

laten we de huidige projectstructuur bekijken voordat we de e-mailverificatiefuncties toevoegen:

Code language: PHP (php)

Wijzig de functies in auth.php bestand

het volgende voegt de activeringscode en vervaldatum parameter toe aan de register_user() functie. Standaard is de vervaldatum één dag (1 * 24 * 60 * 60).

Code language: PHP (php)

de functie register_user() gebruikt de functie password_hash() om de activeringscode te hasheren.

de functie find_user_by_username() bevat de kolom active in het resultaat:

Code language: PHP (php)

het volgende definieert een nieuwe functie is_user_active() die true retourneert als een gebruiker actief is:

Code language: PHP (php)

de functie login() moet alleen actieve gebruikers toestaan zich aan te melden:

Code language: PHP (php)

definieer functies die zich bezighouden met e-mailverificatie

we voegen de functies die zich bezighouden met e-mailverificatie toe aan het auth.php bestand.

maak eerst een nieuw bestand app.php aan in de config map en definieer de volgende constanten:

Code language: PHP (php)

we zullen deze constanten gebruiken voor het verzenden van activatie-e-mails naar gebruikers. Om deze constanten te gebruiken, moet u het app.php bestand in het bootstrap.php bestand opnemen:

Code language: PHP (php)

ten tweede, definieer een functie die een unieke willekeurige activeringscode genereert:

Code language: PHP (php)

ten derde, definieer een functie die een e-mailverificatie verzendt met een activeringslink.

Code language: PHP (php)

stel dat de URL van de app http://localhost/auth is, dan ziet de activatie-URL er zo uit:

Code language: PHP (php)

de functie send_activation_email() gebruikt de ingebouwde functie mail() voor het verzenden van e-mails.

ten vierde, definieer een functie die een gebruiker verwijdert op id en status. Standaard, Het verwijdert een inactieve gebruiker door id.

Code language: PHP (php)

ten vijfde, definieer een functie die een niet-geverifieerde gebruiker vindt door middel van een e-mail-en activeringscode. Als de activeringscode is verlopen, verwijdert de functie ook het gebruikersrecord door de functie delete_user_by_id() aan te roepen.

Code language: PHP (php)

zesde, definieer een nieuwe activate_user() functie die een gebruiker activeert met een id:

Code language: PHP (php)

Wijzig het register.php page

de src/register.php moet de logica bevatten om de e-mailverificatie logica af te handelen.

Code language: PHP (php)

Hoe werkt het?

genereer eerst een activeringscode:

Code language: PHP (php)

ten tweede, registreer de gebruiker met de activeringscode:

Code language: PHP (php)

Ten derde, stuur een e-mail naar het e-mailadres van de gebruiker door de functie send_activation_email() aan te roepen:

Code language: PHP (php)

tot slot, de gebruiker omleiden naar de login pagina en toon een flash-bericht dat de Gebruiker verzoekt om het account te activeren via e-mail:

Code language: PHP (php)

Maak het activeren.php page

om gebruikers toe te staan hun accounts te activeren na registratie, kunt u een nieuwe activate.php pagina aanmaken in de public map en de volgende pagina gebruiken:

Code language: PHP (php)

hoe het activeren.php werkt.

eerst de e-mail-en activeringscode zuiveren en valideren:

Code language: PHP (php)

ten tweede, vind de niet-geverifieerde gebruiker op basis van de e-mail en verificatiecode als er geen validatiefouten zijn. De find_unverified_user() zal ook de niet-geverifieerde gebruiker verwijderen als de vervaldatum is verlopen.

Code language: PHP (php)

ten derde, activeer de gebruiker en redirect naar de login.php-pagina:

Code language: PHP (php)

ten slotte, omleiden naar de registration.php als er een fout is:

Code language: PHP (php)

In deze tutorial heb je geleerd hoe je e-mailverificatie voor gebruikersaccounts in PHP kunt implementeren.

Leave a Reply