Italian (Italiano) translation by Mirko Pizii (you can also view the original English article)

Introduzione
Nel precedente episodio, ho scritto come preparare la tua applicazione per gli SMS usando Twilio, un servizio comune di testo. Nel tutorial di oggi, ti mostrerò come verificare i numeri di telefono di un utente prima di cominciare a trasmettere un alto volume di testi aumentando i costi.
Prima di cominciare, voglio incoraggiarti a scrivere le domande e feedback nei commenti. Se ti piacerebbe continuare sui miei futuro tutorial di Envato Tuts+ e altre serie, visita la mia pagina da istruttore o segui @lookahead_io.
Delineando il processo
Dopo che l'utente ti fornisce il loro numero di telefono, vogliamo eseguire una manciata di semplici passaggi:
- Generare un codice unico a 4 cifre.
- Salvare il loro numero di telefono e il codice a quattro cifre nel nostro database (o criptare il codice localmente come variabile nascosta del form sulla pagina).
- Inviare un messaggio al numero non verificato con il codice a quattro cifre.
- Mostrare un form che chiede all'utente di fornire il codice che hanno ricevuto.
- Verificare se i codici coincidono.
- Appuntare il numero come verificato nel database.
La pagina di contatto dell'utente
In Meeting Planner, ogni utente può aggiungere molteplici metodi di contatto, es. Skype, telefono, etc. Ogni numero di telefono deve essere verificato per essere usato per le notifiche via SMS.
La terza riga sotto mostra una casella di spunta in cui possono fare clic per richiedere la verifica:

Facendo clic su questo, trasferisce l'utente al controller actionVerify()
qui sotto; nota che li porta prima al blocco else
perché non hanno ancora inviato un codice:
public function actionVerify($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post())) { ... } else { $canRequest = $model->canRequest(); if ($canRequest) { // send a text to this number $model->requestCode(); return $this->render('verify', [ 'model' => $model, ]); } else { Yii::$app->getSession()->setFlash('error', $canRequest); return $this->redirect(['/user-contact']); } } }
Il metodo canRequest()
controlla se hanno richiesto i codici ripetutamente o troppo frequentemente:
public function canRequest() { if ($this->request_count<UserContact::MAX_REQUEST_COUNT) { if (time() - $this->requested_at>=60) { return true; } else { return Yii::t('frontend','Sorry, you must wait a minute between requests.'); } } else { return Yii::t('frontend','You have exceeded the maximum number of attempts.'); } }
Li faccio aspettare un minuto tra i vari tentativi per ridurre l'abuso.
Trasmettere il codice di verifica
Se permesso, chiama requestCode()
:
public function 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', 'Please return to the site and type in {code}',['code'=>sprintf("%04d",$this->verify_code)])); }
Questo fa il seguente:
- Genera un codice random a quattro cifre.
- Registra l'ultimo momento in tempo (secondi unix) che la richiesta di verifica è stata fatta.
- Incrementa i tentativi di verifica per questo numero.
- E salva tutto ciò nel database.
- Poi, trasmette il testo con il codice che dovrebbe essere uguale all'immagine sotto.

Dopo aver richiesto il codice, salvato nel database dietro le scene e trasmesso il codice all'utente, caricherà il seguente modulo chiedendo il codice:

Verificare il codice
Quando l'utente prova ad inviare il codice, esegue la parte superiore di actionVerify()
:
public function actionVerify($id) { $model = $this->findModel($id); if ($model->load(Yii::$app->request->post())) { // display verification form $model->verify = Yii::$app->request->post()['UserContact']['verify']; if (strval($model->verify_code) == strval($model->verify)) { $model->status = UserContact::STATUS_VERIFIED; $model->update(); Yii::$app->getSession()->setFlash('success',Yii::t('frontend','Thank you, your number is confirmed.')); return $this->redirect(['/user-contact']); } else { Yii::$app->getSession()->setFlash('error', Yii::t('frontend','Sorry, that is incorrect. Please request a new code.')); return $this->redirect(['/user-contact']); } } else { ... } }
Esso controlla se il codice coincide. Se coincide, aggiorna il database per impostare il numero come verificato. E dice all'utente:

Altrimenti, mostra un messaggio di errore:

Prova tu stesso
Se vuoi vederlo in azione, puoi registrarti su Simple Planner o Meeting Planner (in cui è facile con un account social come Facebook o Google) e aggiungi un numero di telefono. Poi fai clic sulla casella di controllo nella lista e vedrai. Questo è tutto.
Ricapitolando
Ovviamente, se la tua applicazione invia troppi messaggi di testo, è un notevole costo del business e vuoi limitare l'abuso. Puoi cominciare con l'installazione di un firewall contro i numeri invalidi—o numeri validi non posseduti dall'impostore.
Spero che lo hai trovato d'aiuto. Se hai delle domande o suggerimenti, per favore scrivili nei commenti. Se ti piacerebbe tenerti aggiornato sui miei futuri tutorial su Envato Tuts+ e altre serie, visita la mia pagina da istruttore o segui @lookahead_io. Sicuramente guarda le mie serie della mia startup e Meeting Planner.
Link correlati
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post