Verifica email PHP

Riepilogo: in questo tutorial, imparerai come verificare l’indirizzo email del nuovo account in modo sicuro utilizzando un link di attivazione.

Introduzione alla verifica e-mail PHP per i nuovi account

Nei tutorial precedenti, hai imparato come creare un modulo di registrazione che consente agli utenti di registrarsi per gli account. E hai anche imparato come creare un modulo di accesso che consentirà agli utenti di utilizzare il nome utente e la password per accedere.

Quando gli utenti si registrano per nuovi account, inseriscono i loro indirizzi e-mail. Tuttavia, gli utenti possono inserire qualsiasi indirizzo e-mail perché il sistema non verifica e-mail.

Per verificare gli indirizzi e-mail degli utenti, puoi inviare un’e-mail di verifica a questi indirizzi e richiedere agli utenti di aprire le loro e-mail e fare clic su un link di attivazione.

Per farlo, segui i seguenti passaggi quando gli utenti registrano gli account:

  • Generare un codice di attivazione univoco e impostare un tempo di scadenza, ad esempio, un giorno.
  • Salvare il record utente nel database e contrassegnare lo stato dell’utente come inattivo. Inoltre, salva l’hash del codice di attivazione & tempo di scadenza.
  • Invia una email con il link di attivazione all’indirizzo email dell’utente. Il link di attivazione conterrà l’indirizzo e-mail e il codice di attivazione, ad es., https://app.com/activate.php?email=email&activation_code=abcd
  • Informare l’utente di attivare l’account via e-mail.

L’hashing del codice di attivazione garantisce che solo l’utente che possiede l’indirizzo email possa attivare l’account, non chiunque altro, nemmeno l’amministratore, possa accedere al database.

Se gli utenti non hanno attivato l’account, non saranno in grado di accedere.

Quando gli utenti fanno clic sul link di attivazione nell’e-mail, è necessario eseguire le seguenti operazioni:

  • Disinfettare e convalidare l’e-mail e il codice di attivazione.
  • Trova l’utente inattivo con l’indirizzo email. Se non esiste alcun record utente, reindirizzare al modulo di registrazione.
  • Se esiste un record utente e il codice di attivazione è scaduto, eliminare il record utente dal database e reindirizzare al modulo di registrazione.
  • In caso contrario, abbinare il codice di attivazione con l’hash del codice di attivazione memorizzato nel database. Se corrispondono, contrassegnare il record utente come attivo e reindirizzare alla pagina di accesso.

Ricreare la tabella utenti

Innanzitutto, eliminare la tabella users dal database auth :

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

In secondo luogo, creare la tabella users con le nuove colonne active, activation_code, activation_at, activation_expiry:

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

Quanto segue spiega il significato delle nuove colonne.

Il valore predefinito della colonna active è 0. Ciò significa che gli utenti che si registrano per gli account ma non hanno verificato i loro indirizzi e-mail saranno inattivi per impostazione predefinita.

La colonna activation_code memorizzerà l’hash del codice di attivazione. La sua lunghezza dovrebbe essere sufficiente per memorizzare la stringa restituita dalla funzione password_hash().

È importante notare che l’hash verrà troncato se la colonna activation_code non ha una dimensione abbastanza lunga. Farà sì che la funzione password_verify() non corrisponda al codice di attivazione con l’hash.

La colonna activation_expiry memorizza il tempo di scadenza per utilizzare il codice di attivazione prima della scadenza. Il tempo di scadenza garantisce che il codice di attivazione non possa essere utilizzato se l’indirizzo e-mail viene compromesso dopo il tempo di scadenza.

La colonna activated_at memorizza la data e l’ora in cui gli utenti attivano i propri account.

Struttura del progetto

Esaminiamo la struttura del progetto corrente prima di aggiungere le funzioni di verifica e-mail:

Code language: PHP (php)

Modificare le funzioni in auth.file php

Quanto segue aggiunge il codice di attivazione e il parametro di scadenza alla funzione register_user(). Per impostazione predefinita, il tempo di scadenza è di un giorno ( 1 * 24 * 60 * 60).

Code language: PHP (php)

La funzione register_user() utilizza la funzione password_hash() per hash il codice di attivazione.

Il find_user_by_username() funzione include active colonna il risultato:

Code language: PHP (php)

Il seguente definisce una nuova funzione is_user_active() che restituisce true se un utente è attivo:

Code language: PHP (php)

Il login() funzione deve consentire solo gli utenti attivi a segno in:

Code language: PHP (php)

Definire le funzioni che si occupano di e-mail di verifica

aggiungiamo le funzioni che si occupano di e-mail di verifica per l’ auth.php file.

Innanzitutto, creare un nuovo file app.php nella cartella config e definire le seguenti costanti:

Code language: PHP (php)

Useremo queste costanti per inviare e-mail di attivazione agli utenti. Per utilizzare queste costanti, è necessario includere il file app.php nel file bootstrap.php :

Code language: PHP (php)

In secondo luogo, definire una funzione che genera un codice di attivazione univocamente casuale:

Code language: PHP (php)

In terzo luogo, definire una funzione che invia una verifica e-mail con un link di attivazione.

Code language: PHP (php)

Supponiamo che l’URL dell’app sia http://localhost/auth, l’URL di attivazione sarà simile a questo:

Code language: PHP (php)

La funzione send_activation_email() utilizza la funzione mail() integrata per l’invio di e-mail.

In quarto luogo, definire una funzione che elimina un utente per id e stato. Per impostazione predefinita, elimina un utente inattivo per id.

Code language: PHP (php)

Quinto, definire una funzione che trova un utente non verificato da una e-mail e codice di attivazione. Se il codice di attivazione è scaduto, la funzione elimina anche il record utente chiamando la funzione delete_user_by_id().

Code language: PHP (php)

Sesto, definire una nuova funzione activate_user() che attiva un utente da un id:

Code language: PHP (php)

Modificare il registro.php page

Il src/register.php deve incorporare la logica per gestire la logica di verifica e-mail.

Code language: PHP (php)

Come funziona.

in Primo luogo, generare un codice di attivazione:

Code language: PHP (php)

Secondo, la registrazione, l’utente con il codice di attivazione:

Code language: PHP (php)

Terzo, inviare un email a l’indirizzo email dell’utente chiamando il send_activation_email() funzione:

Code language: PHP (php)

Infine, reindirizzare l’utente alla pagina di login e visualizza un messaggio flash che richiede all’utente di attivare l’account tramite e-mail:

Code language: PHP (php)

Creare attiva.pagina php

Per consentire agli utenti di attivare i propri account dopo la registrazione, è possibile creare una nuova pagina activate.php nella cartella public e utilizzare la seguente pagina:

Code language: PHP (php)

Come l’attivazione.php funziona.

In primo luogo, disinfettare e convalidare l’e-mail e il codice di attivazione:

Code language: PHP (php)

In secondo luogo, trova l’utente non verificato in base all’e-mail e al codice di verifica se non ci sono errori di convalida. find_unverified_user() eliminerà anche l’utente non verificato se il tempo di scadenza è scaduto.

Code language: PHP (php)

In terzo luogo, attivare l’utente e reindirizzare al login.pagina php:

Code language: PHP (php)

Infine, reindirizzare a registration.php se si verifica un errore:

Code language: PHP (php)

In questo tutorial, hai imparato come implementare la verifica e-mail per gli account utente in PHP.

Leave a Reply