Comment vérifier un numéro de téléphone par SMS

Ce que vous allez créer

introduction

Dans l'épisode précédent, j'avais écrit sur la préparation de votre application pour SMS avec Twilio, un service de messagerie texte couramment utilisé. Dans le tutoriel d'aujourd'hui, je vais vous montrer comment vérifier les numéros de téléphone des utilisateurs avant de transmettre un grand volume de textes et d'augmenter vos coûts..

Avant de commencer, je tiens à vous encourager à poster des questions et des commentaires dans les commentaires. Si vous souhaitez suivre mes futurs tutoriels et séries d’Envato Tuts +, veuillez visiter la page de mon instructeur ou suivre @lookahead_io..

Décrire le processus

Une fois que l'utilisateur a fourni son numéro de téléphone, nous souhaitons effectuer quelques étapes simples:

  • Générer un code unique à quatre chiffres.
  • Stockez leur numéro de cellule et le code à quatre chiffres dans notre base de données (ou chiffrer le code localement en tant que variable de formulaire masquée sur la page).
  • Envoyez un texte au numéro non vérifié avec le code à quatre chiffres.
  • Afficher un formulaire demandant à l'utilisateur de fournir le code reçu.
  • Vérifier que les codes correspondent.
  • Désigner le numéro tel que vérifié dans la base de données.

La page de contact de l'utilisateur

Dans Meeting Planner, chaque utilisateur peut ajouter plusieurs méthodes de contact, par exemple. Skype, téléphone, etc. Chaque numéro de cellule doit être vérifié pour pouvoir être utilisé pour les notifications par SMS..

La troisième ligne ci-dessous montre une case à cocher sur laquelle ils peuvent cliquer pour demander une vérification:

En cliquant sur qui transfère l'utilisateur à la actionVerify () contrôleur ci-dessous; notez que cela les amène à la autre bloquer au début car ils n'ont pas encore soumis de code:

fonction publique actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) … sinon $ canRequest = $ model-> canRequest (); if ($ canRequest) // envoie un texte à ce numéro $ model-> requestCode (); return $ this-> render ('verify', ['model' => $ model,]);  else Yii :: $ app-> getSession () -> setFlash ('error', $ canRequest); return $ this-> redirect (['/ user-contact']); 

La méthode canRequest () vérifie s'ils ont demandé des codes à plusieurs reprises ou trop fréquemment:

fonction publique canRequest () if ($ this-> request_countrequired_at> = 60) return true;  else return Yii :: t ('frontend', 'Désolé, vous devez attendre une minute entre les requêtes.');  else return Yii :: t ('frontend', 'Vous avez dépassé le nombre maximal de tentatives.'); 

Je leur fais attendre une minute entre les tentatives de réduction des abus.

Transmettre le code de vérification

Si autorisé, il appelle code requis():

fonction publique requestCode () $ this-> verify_code = rand (0,9999); $ this-> required_at = time (); $ this-> request_count + = 1; $ this-> update (); $ sms = new Sms; $ sms-> Transmettre ($ this-> info, Yii :: t ('frontend', 'Merci de revenir sur le site et de saisir code', ['code' => sprintf ("% 04d", $ this -> verify_code)])); 

Cela fait ce qui suit:

  • Génère un code aléatoire à quatre chiffres.
  • Il enregistre le dernier moment dans lequel une demande de vérification a été faite (secondes unix).
  • Il incrémente les tentatives de vérification pour ce nombre.
  • Et tout cela est stocké dans la base de données.
  • Ensuite, il transmet un texte avec le code qui ressemble à l'image ci-dessous.

Après avoir demandé le code, l’avoir sauvegardé dans la base de données en coulisse et l’avoir transmis à l’utilisateur, le formulaire suivant demande le code:

Vérification du code

Lorsque l'utilisateur tente de soumettre un code, il exécute la partie supérieure de actionVerify ():

fonction publique actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) // affiche le formulaire de vérification $ 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', 'Merci, votre numéro est confirmé.')); return $ this-> redirect (['/ user-contact']);  else Yii :: $ app-> getSession () -> setFlash ('error', Yii :: t ('frontend', 'Désolé, cela est incorrect. Veuillez demander un nouveau code.')); return $ this-> redirect (['/ user-contact']);   autre …  

Il vérifie que les codes correspondent. Si tel est le cas, la base de données est mise à jour pour refléter le nombre vérifié. Et il dit à l'utilisateur:

Sinon, il affiche un message d'erreur:

Essayez vous-même

Si vous souhaitez voir cela en action, vous pouvez vous inscrire à Simple Planner ou à Meeting Planner (ce qui est facile avec un compte social comme Facebook ou Google) et ajouter un numéro de téléphone. Cliquez ensuite sur la coche dans la liste que vous verrez. C'est tout.

Emballer

De toute évidence, si votre application envoie beaucoup de SMS, cela représente un coût considérable pour l'entreprise et vous souhaitez limiter les abus. Cela commence par la mise en place d'un pare-feu contre les numéros invalides ou les numéros valides n'appartenant pas réellement à l'imposteur..

J'espère que vous avez trouvé cela utile. Si vous avez des questions ou des suggestions, postez-les dans les commentaires. Si vous souhaitez suivre mes futurs tutoriels et séries d’Envato Tuts +, veuillez visiter la page de mon instructeur ou suivre @lookahead_io. Vérifiez certainement ma série de démarrage et planificateur de réunion.

Liens connexes

  • Préparation à la messagerie texte (Envato Tuts +)
  • Programmation avec la série Yii2 (Envato Tuts +)
  • Yii2 Developer Exchange