PHP Email Verification

Summary: in this tutorial, you ‘ll learn how to verification the new account’ s email address securely using an activating link.

Johdatus PHP: n sähköpostivahvistukseen uusille tileille

aiemmissa tutoriaaleissa opittiin luomaan rekisteröintilomake, jonka avulla käyttäjät voivat rekisteröityä tileille. Opit myös rakentamaan kirjautumislomakkeen, jonka avulla käyttäjät voivat käyttää käyttäjätunnusta ja salasanaa kirjautumiseen.

kun käyttäjät rekisteröityvät uusille tileille, he syöttävät sähköpostiosoitteensa. Käyttäjät voivat kuitenkin syöttää minkä tahansa sähköpostiosoitteen, koska järjestelmä ei vahvista sähköpostia.

voit tarkistaa käyttäjien sähköpostiosoitteet lähettämällä vahvistussähköpostin näihin sähköpostiosoitteisiin ja pyytämällä käyttäjiä avaamaan sähköpostinsa ja napsauttamalla aktivointilinkkiä.

voit tehdä sen noudattamalla seuraavia ohjeita, kun käyttäjät rekisteröivät tilejä:

  • luo yksilöllinen aktivointikoodi ja aseta vanhenemisaika, esim. yksi päivä.
  • tallenna käyttäjän tietue tietokantaan ja merkitse käyttäjän tila passiiviseksi. Tallenna myös aktivointikoodin hash & vanhenemisaika.
  • lähetä aktivointilinkin sisältävä sähköposti käyttäjän sähköpostiosoitteeseen. Aktivointilinkki sisältää sähköpostiosoitteen ja aktivointikoodin, esim., https://app.com/activate.php?email=email&activation_code=abcd
  • Ilmoita käyttäjälle tilin aktivoimisesta sähköpostitse.

aktivointikoodin tiivistäminen varmistaa, että tilin voi aktivoida vain käyttäjä, joka omistaa sähköpostiosoitteen, ei kukaan muu, edes ylläpitäjä, joka pääsee tietokantaan.

jos käyttäjät eivät ole aktivoineet tiliä, he eivät voi kirjautua sisään.

kun käyttäjät klikkaavat sähköpostissa olevaa aktivointilinkkiä, sinun on suoritettava seuraavat vaiheet:

  • Puhdista ja vahvista sähköposti ja aktivointikoodi.
  • Etsi epäaktiivinen käyttäjä sähköpostiosoitteella. Jos käyttäjätietoa ei ole, ohjaa Rekisteröitymislomakkeeseen.
  • jos käyttäjätietoja on olemassa ja aktivointikoodi on vanhentunut, poista käyttäjätiedot tietokannasta ja ohjaa uudelleen rekisteröintilomakkeeseen.
  • muussa tapauksessa täsmää aktivointikoodi tietokantaan tallennetun aktivointikoodin hash-koodiin. Jos ne täsmäävät, merkitse käyttäjätiedot aktiivisiksi ja ohjaa kirjautumissivulle.

luo käyttäjätaulukko

ensin, pudota users taulukko auth tietokannasta:

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

toiseksi, luo users – taulukko uusilla sarakkeilla active, activation_code, activation_at, activation_expiry:

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

seuraavassa selitetään uusien sarakkeiden merkitys.

active sarakkeen oletusarvo on 0. Tämä tarkoittaa, että käyttäjät, jotka rekisteröityvät tileille, mutta eivät ole vahvistaneet sähköpostiosoitteitaan, eivät ole oletusarvoisesti aktiivisia.

activation_code – sarakkeeseen tallennetaan aktivointikoodin hash. Sen pituuden tulisi riittää password_hash() funktion palauttaman merkkijonon tallentamiseen.

on tärkeää huomata, että hash typistyy, jos activation_code – palstalla ei ole tarpeeksi pitkää kokoa. Se aiheuttaa sen, että password_verify() – funktio ei vastaa aktivointikoodia hash: iin.

activation_expiry sarake tallentaa viimeisen käyttöajan aktivointikoodin käyttämiseksi ennen voimassaolon päättymistä. Vanhenemisaika varmistaa, että aktivointikoodia ei voi käyttää, jos sähköpostiosoite vaarantuu vanhenemisajan jälkeen.

activated_at sarakkeeseen merkitään päivämäärä ja kellonaika, jolloin käyttäjät aktivoivat tilinsä.

projektirakenne

tarkistetaan nykyinen projektirakenne ennen sähköpostin vahvistustoimintojen lisäämistä:

Code language: PHP (php)

muokkaa toimintoja auth.php-tiedosto

seuraava Lisää aktivointikoodin ja päättymisparametrin register_user() – funktioon. Oletuksena vanhenemisaika on yksi päivä (1 * 24 * 60 * 60).

Code language: PHP (php)

register_user() funktio käyttää password_hash() – funktiota aktivointikoodin hajauttamiseen.

find_user_by_username() funktio sisältää active sarakkeen tuloksessa:

Code language: PHP (php)

seuraavassa määritellään Uusi funktio is_user_active(), joka palauttaa true jos käyttäjä on aktiivinen:

Code language: PHP (php)

login() – toiminnon avulla vain aktiiviset käyttäjät voivat kirjautua sisään:

Code language: PHP (php)

määritä toiminnot, jotka käsittelevät sähköpostin vahvistusta

lisäämme sähköpostin vahvistusta käsittelevät toiminnot auth.php – tiedostoon.

luo ensin uusi tiedosto app.php config – kansioon ja määrittele seuraavat vakiot:

Code language: PHP (php)

käytämme näitä vakioita aktivointisähköpostien lähettämiseen käyttäjille. Jotta voit käyttää näitä vakioita, sinun on sisällytettävä app.php – tiedosto bootstrap.php – tiedostoon:

Code language: PHP (php)

toiseksi, määrittele funktio, joka luo ainutlaatuisen satunnaisen aktivointikoodin:

Code language: PHP (php)

kolmanneksi määrittele toiminto, joka lähettää sähköpostin vahvistuksen aktivointilinkin kanssa.

Code language: PHP (php)

Oletetaan, että sovelluksen URL on http://localhost/auth, aktivoiva URL näyttää tältä:

Code language: PHP (php)

send_activation_email() funktio käyttää sisäänrakennettua mail() – funktiota sähköpostien lähettämiseen.

neljäs, määrittele funktio, joka poistaa käyttäjän id: N ja statuksen perusteella. Oletusarvoisesti se poistaa passiivisen käyttäjän id: llä.

Code language: PHP (php)

viides, määrittele funktio, joka löytää vahvistamattoman käyttäjän sähköpostin ja aktivointikoodin avulla. Jos aktivointikoodi on vanhentunut, toiminto poistaa myös käyttäjätietueen kutsumalla delete_user_by_id() funktiota.

Code language: PHP (php)

kuudes, Määritä uusi activate_user() funktio, joka aktivoi käyttäjän id: llä:

Code language: PHP (php)

muokkaa rekisteriä.php-sivu

src/register.php tarvitsee logiikan sähköpostin vahvistuslogiikan käsittelyyn.

Code language: PHP (php)

miten se toimii.

luo ensin aktivointikoodi:

Code language: PHP (php)

toiseksi rekisteröi käyttäjä aktivointikoodilla:

Code language: PHP (php)

kolmanneksi lähetä sähköpostia käyttäjän sähköpostiosoitteeseen soittamalla funktioon send_activation_email() :

Code language: PHP (php)

lopuksi ohjaa käyttäjä kirjautumissivulle ja näytä flash-viesti, joka pyytää käyttäjää aktivoimaan tilin sähköpostitse:

Code language: PHP (php)

luo aktivointi.php-sivu

jotta käyttäjät voivat aktivoida tilinsä rekisteröitymisen jälkeen, voit luoda uuden activate.php sivun public kansioon ja käyttää seuraavaa sivua:

Code language: PHP (php)

miten aktivoit.php toimii.

puhdista ja vahvista ensin sähköposti ja aktivointikoodi:

Code language: PHP (php)

toiseksi, etsi vahvistamaton käyttäjä sähköpostin ja vahvistuskoodin perusteella, jos vahvistusvirheitä ei ole. find_unverified_user() poistaa myös vahvistamattoman käyttäjän, jos vanhenemisaika on päättynyt.

Code language: PHP (php)

kolmas, aktivoi käyttäjä ja ohjaa kirjautumiseen.php sivu:

Code language: PHP (php)

ohjaa lopuksi registration.php jos on virhe:

Code language: PHP (php)

tässä opetusohjelmassa, olet oppinut toteuttamaan sähköpostin todentaminen käyttäjätilien PHP.

Leave a Reply