PHP-e-postverifiering
sammanfattning: i den här handledningen lär du dig hur du verifierar det nya kontots e-postadress säkert med en aktiveringslänk.
introduktion till PHP-e-postverifiering för nya konton
i tidigare handledning lärde du dig hur du skapar ett registreringsformulär som tillåter användare att registrera sig för konton. Och du lärde dig också hur man bygger ett inloggningsformulär som gör det möjligt för användare att använda användarnamnet och lösenordet för att logga in.
när användare registrerar sig för nya konton anger de sina e-postadresser. Användare kan dock ange vilken e-postadress som helst eftersom systemet inte verifierar e-post.
för att verifiera användarnas e-postadresser kan du skicka ett verifieringsmeddelande till dessa e-postadresser och be användarna att öppna sina e-postmeddelanden och klicka på en aktiveringslänk.
för att göra det följer du följande steg när användare registrerar konton:
- generera en unik aktiveringskod och ställ in en utgångstid, t.ex. en dag.
- spara användarposten i databasen och markera användarens status som inaktiv. Spara också hash för aktiveringskoden & utgångstid.
- skicka ett e-postmeddelande med aktiveringslänken till användarens e-postadress. Aktiveringslänken kommer att innehålla e-postadress och aktiveringskod, t. ex.,
https://app.com/activate.php?email=email&activation_code=abcd
- informera användaren om att aktivera kontot via e-post.
Hashing aktiveringskoden säkerställer att endast användaren som äger e-postadressen kan aktivera kontot, inte någon annan, även administratören, som kan komma åt databasen.
om användare inte har aktiverat konto kommer de inte att kunna logga in.
när användare klickar på aktiveringslänken i e-postmeddelandet måste du utföra följande steg:
- sanera och validera e-post-och aktiveringskoden.
- hitta den inaktiva användaren med e-postadressen. Om ingen användarpost finns, omdirigera till registreringsformuläret.
- om det finns en användarpost och aktiveringskoden har gått ut, ta bort användarposten från databasen och omdirigera till registreringsformuläret.
- matcha annars aktiveringskoden med hash för aktiveringskoden som är lagrad i databasen. Om de matchar markerar du användarposten som aktiv och omdirigerar till inloggningssidan.
återskapa tabellen användare
släpp först tabellen users
från databasen auth
:
Code language: SQL (Structured Query Language) (sql)
för det andra, skapa tabellen users
med de nya kolumnerna active
, activation_code
, activation_at
, activation_expiry
:
Code language: SQL (Structured Query Language) (sql)
följande förklarar betydelsen av de nya kolumnerna.
värdet för kolumnen active
är som standard 0. Detta innebär att användare som registrerar sig för konton men inte har verifierat sina e-postadresser kommer att vara inaktiva som standard.
kolumnen activation_code
lagrar hash för aktiveringskoden. Dess längd bör vara tillräcklig för att lagra strängen som returneras av funktionen password_hash()
.
det är viktigt att märka att hash kommer att trunkeras om kolumnen activation_code
inte har en tillräckligt lång storlek. Det kommer att orsaka att funktionen password_verify()
inte matchar aktiveringskoden med hash.
kolumnen activation_expiry
lagrar utgångstiden för att använda aktiveringskoden före utgången. Utgångstiden säkerställer att aktiveringskoden inte kan användas om e-postadressen äventyras efter utgångstiden.
kolumnen activated_at
lagrar datum och tid när användare aktiverar sina konton.
projektstruktur
låt oss granska den aktuella projektstrukturen innan du lägger till e-postverifieringsfunktionerna:
Code language: PHP (php)
ändra funktionerna i auth.php-fil
följande lägger till aktiveringskoden och utgångsparametern till funktionen register_user()
. Som standard är utgångstiden en dag (1 * 24 * 60 * 60
).
Code language: PHP (php)
funktionen register_user()
använder funktionen password_hash()
för att hash aktiveringskoden.
funktionen find_user_by_username()
innehåller kolumnen active
i resultatet:
Code language: PHP (php)
följande definierar en ny funktion is_user_active()
som returnerar true om en användare är aktiv:
Code language: PHP (php)
funktionen login()
bör tillåta endast aktiva användare att logga in:
Code language: PHP (php)
definiera funktioner som hanterar e-postverifiering
vi lägger till funktionerna som hanterar e-postverifiering i filen auth.php
.
skapa först en ny fil app.php
i mappen config
och definiera följande konstanter:
Code language: PHP (php)
vi använder dessa konstanter för att skicka aktiveringsmeddelanden till användare. För att använda dessa konstanter måste du inkludera filen app.php
i filen bootstrap.php
:
Code language: PHP (php)
för det andra, definiera en funktion som genererar en unik slumpmässig aktiveringskod:
Code language: PHP (php)
för det tredje, definiera en funktion som skickar en e-postverifiering med en aktiveringslänk.
Code language: PHP (php)
Antag att appens URL är http://localhost/auth
, aktiveringsadressen kommer att se ut så här:
Code language: PHP (php)
funktionen send_activation_email()
använder den inbyggda funktionen mail()
för att skicka e-post.
fjärde, definiera en funktion som tar bort en användare med id och status. Som standard raderar den en inaktiv användare med id.
Code language: PHP (php)
femte, definiera en funktion som hittar en overifierad användare med en e-post och aktiveringskod. Om aktiveringskoden har gått ut raderar funktionen också användarposten genom att anropa funktionen delete_user_by_id()
.
Code language: PHP (php)
sjätte, definiera en ny activate_user()
– funktion som aktiverar en användare med ett id:
Code language: PHP (php)
ändra registret.php-sida
src/register.php
måste införliva logiken för att hantera e-postverifieringslogiken.
Code language: PHP (php)
hur det fungerar.
generera först en aktiveringskod:
Code language: PHP (php)
för det andra, registrera användaren med aktiveringskoden:
Code language: PHP (php)
för det tredje, skicka ett mail till användarens e-postadress genom att ringa funktionen send_activation_email()
:
Code language: PHP (php)
slutligen omdirigera användaren till inloggningssidan och visa ett flash-meddelande som ber användaren att aktivera kontot via e-post:
Code language: PHP (php)
skapa aktivera.php-sida
för att tillåta användare att aktivera sina konton efter registrering kan du skapa en ny activate.php
– sida i mappen public
och använda följande sida:
Code language: PHP (php)
hur aktivera.php fungerar.
först, sanera och validera e-post-och aktiveringskoden:
Code language: PHP (php)
för det andra, hitta den overifierade användaren baserat på e-post-och verifieringskoden om det inte finns några valideringsfel. find_unverified_user()
tar också bort den overifierade användaren om utgångstiden har löpt ut.
Code language: PHP (php)
tredje, aktivera användaren och omdirigera till inloggningen.php-sida:
Code language: PHP (php)
slutligen omdirigera till registration.php
om det finns ett fel:
Code language: PHP (php)
i den här handledningen har du lärt dig hur du implementerar e-postverifiering för användarkonton i PHP.
Leave a Reply