Come verificare un numero di telefono tramite SMS

Cosa starai creando

introduzione

Nell'episodio precedente, ho scritto di preparare la tua applicazione per gli SMS utilizzando Twilio, un servizio di sms comunemente usato. Nel tutorial di oggi, ti mostrerò come verificare i numeri di telefono degli utenti prima di trasmettere un volume elevato di testi e aumentare i tuoi costi.

Prima di iniziare, desidero incoraggiarvi a inviare domande e feedback nei commenti. Se desideri tenere il passo con il mio futuro Envato Tuts + tutorial e altre serie, visita la pagina del mio istruttore o segui @lookahead_io.

Delineare il processo

Dopo che l'utente ha fornito il proprio numero di telefono, vogliamo eseguire una serie di semplici passaggi:

  • Genera un codice univoco a quattro cifre.
  • Memorizza il loro numero di cellulare e il codice a quattro cifre nel nostro database (o crittografare il codice localmente come una variabile di modulo nascosta nella pagina).
  • Invia un testo al numero non verificato con il codice a quattro cifre.
  • Mostra un modulo chiedendo all'utente di fornire il codice che hanno ricevuto.
  • Verifica i codici corrispondenti.
  • Designare il numero come verificato nel database.

La pagina dei contatti dell'utente

In Meeting Planner, ogni utente può aggiungere più metodi di contatto, ad es. Skype, telefono, ecc. Ogni numero di cella deve essere verificato per essere utilizzato per le notifiche SMS.

La terza riga in basso mostra una casella di spunta su cui possono fare clic per richiedere la verifica:

Cliccando che trasferisce l'utente al actionVerify () controllore sotto; nota che li porta al altro blocco all'inizio perché non hanno ancora inviato un codice:

funzione pubblica actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) ... else $ canRequest = $ model-> canRequest (); if ($ canRequest) // invia un testo a questo numero $ model-> requestCode (); return $ this-> render ('verify', ['model' => $ model,]);  else Yii :: $ app-> getSession () -> setFlash ('errore', $ canRequest); return $ this-> redirect (['/ user-contact']); 

Il metodo canRequest () controlla se hanno richiesto codici ripetutamente o troppo frequentemente:

funzione pubblica canRequest () if ($ this-> request_countrequested_at> = 60) return true;  else return Yii :: t ('frontend', 'Sorry, devi aspettare un minuto tra le richieste.');  else return Yii :: t ('frontend', 'Hai superato il numero massimo di tentativi.'); 

Li faccio aspettare un minuto tra i tentativi di ridurre gli abusi.

Trasmettere il codice di verifica

Se consentito, chiama codice richiesto():

funzione pubblica requestCode () $ this-> verify_code = rand (0,9999); $ this-> requested_at = time (); $ This-> request_count + = 1; $ This-> update (); $ sms = new Sms; $ sms-> transmit ($ this-> info, Yii :: t ('frontend', 'Si prega di tornare al sito e digitare code', ['code' => sprintf ("% 04d", $ this -> verify_code)])); 

Questo fa quanto segue:

  • Genera un codice casuale a quattro cifre.
  • Registra l'ultimo momento nel tempo (unix secondi) che è stata effettuata una richiesta di verifica.
  • Aumenta i tentativi di verifica per questo numero.
  • E memorizza tutto ciò nel database.
  • Quindi, trasmette un testo con il codice che assomiglia all'immagine qui sotto.

Dopo aver richiesto il codice, salvandolo nel database dietro le quinte e trasmettendo il codice all'utente, carica il seguente modulo chiedendo il codice:

Verifica del codice

Quando l'utente tenta di inviare un codice, esegue la parte superiore di actionVerify ():

funzione pubblica actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) // visualizza modulo di verifica $ model-> verify = Yii :: $ app-> request-> post () [' UserContact '] [' verifica ']; if (strval ($ model-> verify_code) == strval ($ model-> verify)) $ model-> status = UserContact :: STATUS_VERIFIED; $ Modello-> update (); Yii :: $ app-> getSession () -> setFlash ('success', Yii :: t ('frontend', 'Grazie, il tuo numero è confermato.')); return $ this-> redirect (['/ user-contact']);  else Yii :: $ app-> getSession () -> setFlash ('errore', Yii :: t ('frontend', 'Mi dispiace, non è corretto. Richiedi un nuovo codice.')); return $ this-> redirect (['/ user-contact']);   altro …  

Controlla che i codici corrispondano. Se lo fanno, aggiorna il database per riflettere il numero è stato verificato. E dice all'utente:

In caso contrario, visualizza un messaggio di errore:

Prova tu stesso

Se vuoi vedere questo in azione, puoi iscriverti a Simple Planner o Meeting Planner (che è facile con un account social come Facebook o Google) e aggiungere un numero di telefono. Quindi fai clic sul segno di spunta nell'elenco che vedrai. Questo è tutto.

Avvolgendo

Ovviamente, se l'applicazione invia molti messaggi di testo, è un costo notevole dell'attività e si desidera limitare l'abuso. Ciò inizia con la creazione di un firewall contro numeri non validi o numeri validi non effettivamente posseduti dall'impostore.

Spero che tu abbia trovato questo utile. Se avete domande o suggerimenti, per favore pubblicateli nei commenti. Se desideri tenere il passo con il mio futuro Envato Tuts + tutorial e altre serie, visita la pagina del mio istruttore o segui @lookahead_io. Sicuramente controlla le mie serie di startup e Meeting Planner.

Link correlati

  • Preparazione per messaggi di testo (Envato Tuts +)
  • Programmazione con la serie Yii2 (Envato Tuts +)
  • Yii2 Developer Exchange