verificarea e-mailului PHP

rezumat: în acest tutorial, veți afla cum să verificați în siguranță adresa de e-mail a noului cont utilizând un link de activare.

Introducere în verificarea e-mailului PHP pentru conturi noi

în tutorialele anterioare, ați învățat cum să creați un formular de înregistrare care să permită utilizatorilor să se înregistreze pentru conturi. Și, de asemenea, ați învățat cum să construiți un formular de conectare care să permită utilizatorilor să utilizeze numele de utilizator și parola pentru a vă conecta.

când utilizatorii se înregistrează pentru conturi noi, își introduc adresele de e-mail. Cu toate acestea, utilizatorii pot introduce orice adresă de e-mail, deoarece sistemul nu verifică e-mailul.

pentru a verifica adresele de e-mail ale utilizatorilor, puteți trimite un e-mail de verificare la aceste adrese de e-mail și puteți solicita utilizatorilor să își deschidă e-mailurile și să facă clic pe un link de activare.

pentru a face acest lucru, urmați pașii următori atunci când utilizatorii înregistrează conturi:

  • generați un cod unic de activare și setați un timp de expirare, de exemplu, o zi.
  • Salvați înregistrarea utilizatorului în baza de date și marcați starea utilizatorului ca inactivă. De asemenea, salvați hash-ul codului de activare & timp de expirare.
  • trimiteți un e-mail cu linkul de activare la adresa de e-mail a utilizatorului. Linkul de activare va conține adresa de e-mail și Codul de activare, de ex., https://app.com/activate.php?email=email&activation_code=abcd
  • informați utilizatorul să activeze contul prin e-mail.

Hashing codul de activare asigură că numai utilizatorul care deține adresa de e-mail poate activa contul, nu oricine altcineva, chiar admin, care poate accesa baza de date.

dacă utilizatorii nu au activat contul, nu se vor putea conecta.

când utilizatorii fac clic pe linkul de activare din e-mail, trebuie să efectuați următorii pași:

  • igienizați și validați e-mailul și Codul de activare.
  • găsiți utilizatorul inactiv cu adresa de e-mail. Dacă nu există nicio înregistrare de utilizator, redirecționați la formularul de înregistrare.
  • dacă există o înregistrare de utilizator și Codul de activare este expirat, ștergeți înregistrarea de utilizator din Baza de date și redirecționați la formularul de înregistrare.
  • în caz contrar, potriviți codul de activare cu hash-ul codului de activare stocat în baza de date. Dacă se potrivesc, marcați înregistrarea utilizatorului ca activă și redirecționați către pagina de conectare.

recreați tabelul utilizatori

mai întâi, aruncați tabelul users din baza de date auth :

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

în al doilea rând, creați tabelul users cu noile coloane active, activation_code, activation_at, activation_expiry:

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

următoarele explică semnificația noilor coloane.

valoarea coloanei active este implicită la 0. Aceasta înseamnă că utilizatorii care se înregistrează pentru conturi, dar nu și-au verificat adresele de e-mail, vor fi inactivi în mod implicit.

coloana activation_code va stoca hash-ul codului de activare. Lungimea sa ar trebui să fie suficientă pentru a stoca șirul returnat de funcția password_hash().

este important să observați că hash-ul va fi trunchiat dacă coloana activation_code nu are o dimensiune suficient de lungă. Aceasta va face ca funcția password_verify() să nu corespundă codului de activare cu hash-ul.

coloana activation_expiry stochează timpul de expirare pentru a utiliza codul de activare înainte de expirare. Timpul de expirare asigură că codul de activare nu poate fi utilizat dacă adresa de e-mail este compromisă după timpul de expirare.

coloana activated_at stochează data și ora la care utilizatorii își activează conturile.

structura proiectului

să revizuim structura curentă a proiectului înainte de a adăuga funcțiile de verificare prin e-mail:

Code language: PHP (php)

modificați funcțiile în auth.fișier php

următoarele adaugă codul de activare și parametrul de expirare la funcția register_user(). În mod implicit, timpul de expirare este de o zi ( 1 * 24 * 60 * 60).

Code language: PHP (php)

funcția register_user() folosește funcția password_hash() pentru a hash codul de activare.

funcția find_user_by_username() include coloana active în rezultat:

Code language: PHP (php)

următoarele definește o nouă funcție is_user_active() care returnează true dacă un utilizator este activ:

Code language: PHP (php)

funcția login() ar trebui să permită doar utilizatorilor activi să se conecteze:

Code language: PHP (php)

definiți funcțiile care se ocupă de verificarea e-mailului

vom adăuga funcțiile care se ocupă de verificarea e-mailului la fișierul auth.php.

mai întâi, creați un fișier nou app.php în folderul config și definiți următoarele constante:

Code language: PHP (php)

vom folosi aceste constante pentru a trimite e-mailuri de activare utilizatorilor. Pentru a utiliza aceste constante, trebuie să includeți fișierul app.php în fișierul bootstrap.php :

Code language: PHP (php)

în al doilea rând, definiți o funcție care generează un cod de activare aleatoriu unic:

Code language: PHP (php)

în al treilea rând, definiți o funcție care trimite o verificare prin e-mail cu un link de activare.

Code language: PHP (php)

să presupunem că adresa URL a aplicației este http://localhost/auth, adresa URL de activare va arăta astfel:

Code language: PHP (php)

funcția send_activation_email() utilizează funcția încorporată mail() pentru trimiterea de e-mailuri.

în al patrulea rând, definiți o funcție care șterge un utilizator după id și stare. În mod implicit, șterge un utilizator inactiv prin id.

Code language: PHP (php)

în al cincilea rând, definiți o funcție care găsește un utilizator neconfirmat printr-un e-mail și un cod de activare. Dacă codul de activare este expirat, funcția șterge și înregistrarea utilizatorului apelând funcția delete_user_by_id().

Code language: PHP (php)

a șasea, definiți o nouă funcție activate_user() care activează un utilizator printr-un id:

Code language: PHP (php)

modificați Registrul.pagina php

src/register.php trebuie să includă logica pentru a gestiona logica de verificare a e-mailurilor.

Code language: PHP (php)

cum funcționează.

mai întâi, generați un cod de activare:

Code language: PHP (php)

în al doilea rând, înregistrați utilizatorul cu codul de activare:

Code language: PHP (php)

în al treilea rând, trimiteți un e-mail la adresa de e-mail a utilizatorului apelând funcția send_activation_email() :

Code language: PHP (php)

în cele din urmă, redirecționați utilizatorul către pagina de conectare și afișați un mesaj flash care solicită utilizatorului să activeze contul prin e-mail:

Code language: PHP (php)

creați activarea.pagina php

pentru a permite utilizatorilor să își activeze conturile după înregistrare, puteți crea o nouă pagină activate.php în folderul public și puteți utiliza următoarea pagină:

Code language: PHP (php)

cum activează.php funcționează.

mai întâi, igienizați și validați e-mailul și Codul de activare:

Code language: PHP (php)

în al doilea rând, găsiți utilizatorul neconfirmat pe baza e-mailului și a codului de verificare dacă nu există erori de validare. find_unverified_user() va șterge, de asemenea, utilizatorul neconfirmat dacă timpul de expirare a expirat.

Code language: PHP (php)

în al treilea rând, activați utilizatorul și redirecționați la autentificare.pagina php:

Code language: PHP (php)

în cele din urmă, redirecționați către registration.php dacă există o eroare:

Code language: PHP (php)

în acest tutorial, ați învățat cum să implementați verificarea prin e-mail pentru conturile de utilizator în PHP.

Leave a Reply