PHP-e-mail-verifikation

Oversigt: i denne tutorial lærer du, hvordan du verificerer den nye kontos e-mail-adresse sikkert ved hjælp af et aktiveringslink.

Introduktion til PHP-e-mail-verifikation for nye konti

i tidligere tutorials lærte du, hvordan du opretter en registreringsformular, der giver brugerne mulighed for at registrere sig for konti. Og du lærte også, hvordan du opbygger en login-formular, der gør det muligt for brugerne at bruge brugernavnet og adgangskoden til at logge ind.

når brugere tilmelder sig nye konti, indtaster de deres e-mail-adresser. Brugere kan dog indtaste en hvilken som helst e-mail-adresse, fordi systemet ikke bekræfter e-mail.

for at bekræfte brugernes e-mail-adresser kan du sende en bekræftelses-e-mail til disse e-mail-adresser og anmode brugerne om at åbne deres e-mails og klikke på et aktiveringslink.

for at gøre det skal du følge følgende trin, når brugere registrerer konti:

  • Generer en unik aktiveringskode og indstil en udløbstid, f.eks.
  • Gem brugerposten i databasen, og marker brugerens status som inaktiv. Gem også hash af aktiveringskoden & udløbstid.
  • Send en e-mail med aktiveringslinket til brugerens e-mail-adresse. Aktiveringslinket vil indeholde E-mail-adressen og aktiveringskoden, f. eks., https://app.com/activate.php?email=email&activation_code=abcd
  • Informer brugeren om at aktivere kontoen via e-mail.

Hashing af aktiveringskoden sikrer, at kun den bruger, der ejer e-mail-adressen, kan aktivere kontoen, ikke nogen anden, endda administratoren, der kan få adgang til databasen.

hvis brugere ikke har aktiveret konto, kan de ikke logge ind.

når brugere klikker på aktiveringslinket i e-mailen, skal du udføre følgende trin:

  • sanitere og validere e-mail og aktiveringskode.
  • Find den inaktive bruger med e-mail-adressen. Hvis der ikke findes nogen brugerregistrering, skal du omdirigere til registreringsformularen.
  • hvis der findes en brugerregistrering, og aktiveringskoden er udløbet, skal du slette brugerregistreringen fra databasen og omdirigere til registreringsformularen.
  • ellers skal du matche aktiveringskoden med hash for aktiveringskoden, der er gemt i databasen. Hvis de matcher, skal du markere brugerposten som aktiv og omdirigere til login-siden.

Genskab brugertabellen

slip først users tabellen fra auth databasen:

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

for det andet skal du oprette users tabellen med de nye kolonner active, activation_code, activation_at, activation_expiry:

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

følgende forklarer betydningen af de nye kolonner.

værdien af kolonnen active er som standard 0. Dette betyder, at brugere, der registrerer sig for konti, men ikke har bekræftet deres e-mail-adresser, som standard er inaktive.

kolonnen activation_code gemmer hash af aktiveringskoden. Dens længde skal være tilstrækkelig til at gemme strengen, der returneres af password_hash() – funktionen.

det er vigtigt at bemærke, at hash vil blive afkortet, hvis kolonnen activation_code ikke har en lang nok størrelse. Det vil medføre, at password_verify() – funktionen ikke matcher aktiveringskoden med hash.

kolonnen activation_expiry gemmer udløbstiden for at bruge aktiveringskoden før udløb. Udløbstiden sikrer, at aktiveringskoden ikke kan bruges, hvis e-mail-adressen kompromitteres efter udløbstiden.

kolonnen activated_at gemmer dato og klokkeslæt, når brugerne aktiverer deres konti.

projektstruktur

lad os gennemgå den aktuelle projektstruktur, før du tilføjer e-mail-verifikationsfunktionerne:

Code language: PHP (php)

ændre funktionerne i auth.php-fil

følgende tilføjer aktiveringskoden og udløbsparameteren til funktionen register_user(). Udløbstiden er som standard en dag (1 * 24 * 60 * 60).

Code language: PHP (php)

funktionen register_user() bruger funktionen password_hash() til at hash aktiveringskoden.

funktionen find_user_by_username() indeholder kolonnen active i resultatet:

Code language: PHP (php)

følgende definerer en ny funktion is_user_active(), der returnerer true, hvis en bruger er aktiv:

Code language: PHP (php)

funktionen login() bør kun tillade aktive brugere at logge ind:

Code language: PHP (php)

Definer funktioner, der beskæftiger sig med e-mailbekræftelse

vi tilføjer de funktioner, der beskæftiger sig med e-mailbekræftelse, til filen auth.php.

Opret først en ny fil app.php i mappen config og definer følgende konstanter:

Code language: PHP (php)

vi bruger disse konstanter til at sende aktiverings-e-mails til brugere. For at bruge disse konstanter skal du medtage filen app.php i filen bootstrap.php :

Code language: PHP (php)

for det andet skal du definere en funktion, der genererer en unik tilfældig aktiveringskode:

Code language: PHP (php)

for det tredje skal du definere en funktion, der sender en e-mail-verifikation med et aktiveringslink.

Code language: PHP (php)

Antag, at appens URL er http://localhost/auth, aktiverings-URL ‘ en vil se sådan ud:

Code language: PHP (php)

funktionen send_activation_email() bruger den indbyggede mail() funktion til at sende e-mails.

for det fjerde skal du definere en funktion, der sletter en bruger efter id og status. Som standard sletter den en inaktiv bruger efter id.

Code language: PHP (php)

for det femte skal du definere en funktion, der finder en uverificeret bruger ved hjælp af en e-mail og aktiveringskode. Hvis aktiveringskoden er udløbet, sletter funktionen også brugerposten ved at kalde funktionen delete_user_by_id().

Code language: PHP (php)

sjette, Definer en ny activate_user() funktion, der aktiverer en bruger med et id:

Code language: PHP (php)

ændre registret.php-side

src/register.php skal inkorporere logikken for at håndtere e-mail-verifikationslogikken.

Code language: PHP (php)

Sådan fungerer det.

generer først en aktiveringskode:

Code language: PHP (php)

for det andet skal du registrere brugeren med aktiveringskoden:

Code language: PHP (php)

for det tredje, send en e-mail til brugerens e-mail-adresse ved at ringe til send_activation_email() – funktionen:

Code language: PHP (php)

til sidst skal du omdirigere brugeren til login-siden og vise en flash-meddelelse, der beder brugeren om at aktivere kontoen via e-mail:

Code language: PHP (php)

Opret aktiveringen.php page

for at give brugerne mulighed for at aktivere deres konti efter registrering, kan du oprette en ny activate.php side i mappen public og bruge følgende side:

Code language: PHP (php)

hvordan aktiveringen.php virker.

først skal du rense og validere e-mail og aktiveringskode:

Code language: PHP (php)

for det andet skal du finde den ubekræftede bruger baseret på e-mail og verifikationskode, hvis der ikke er nogen valideringsfejl. find_unverified_user() sletter også den ubekræftede bruger, hvis udløbstiden er udløbet.

Code language: PHP (php)

for det tredje skal du aktivere brugeren og omdirigere til login.php side:

Code language: PHP (php)

endelig omdirigere til registration.php hvis der er en fejl:

Code language: PHP (php)

i denne vejledning har du lært, hvordan du implementerer e-mail-verifikation for brugerkonti i PHP.

Leave a Reply