Advertisement
  1. Code
  2. PHP

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

Scroll to top
Read Time: 4 min

() translation by (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Introduction

Dans l'épisode précédent, j'ai écrit sur la préparation de votre demande de SMS en utilisant Twilio, un service de messagerie 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 volume élevé de messages et d'augmenter vos coûts.

Avant de commencer, je tiens à vous encourager à poster des questions et commentaires dans les commentaires. Si vous désirez suivre mes futures tutoriaux Envato Tuts + et d'autres séries, veuillez visiter ma page d'instructeur ou suivez @lookahead_io.

Décrire le processus

Après que l'utilisateur a fourni son numéro de téléphone, nous voulons effectuer une poignée d'étapes simples:

  • Générez 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 comme une variable de formulaire cachée sur la page).
  • Envoyez un message au numéro non vérifié avec le code à quatre chiffres.
  • Affichez un formulaire demandant à l'utilisateur de fournir le code qu'il a reçu.
  • Vérifiez que les codes correspondent.
  • Désignez 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, ex. Skype, téléphone, etc. Chaque numéro de cellule doit être vérifié pour être utilisé pour les notifications par SMS.

La troisième ligne ci-dessous montre une coche dont ils peuvent cliquer pour demander la vérification:

How to Verify a Phone Number via SMS - Contacts listHow to Verify a Phone Number via SMS - Contacts listHow to Verify a Phone Number via SMS - Contacts list

Cliquez sur ce bouton pour transférer l'utilisateur vers le contrôleur actionVerify() ci-dessous; notez qu'il les emmène dans le bloc else d'abord parce qu'ils n'ont pas encore soumis de code:

1
public function actionVerify($id)
2
{
3
    $model = $this->findModel($id);
4
    if ($model->load(Yii::$app->request->post())) {
5
    ...
6
    } else {
7
      $canRequest = $model->canRequest();
8
      if ($canRequest) {
9
        // send a text to this number

10
        $model->requestCode();
11
        return $this->render('verify', [
12
            'model' => $model,
13
        ]);
14
      } else {
15
        Yii::$app->getSession()->setFlash('error', $canRequest);
16
        return $this->redirect(['/user-contact']);
17
      }
18
    }
19
}

La méthode canRequest() vérifie si les codes demandés sont répétés ou trop fréquents:

1
public function canRequest() {
2
    if ($this->request_count<UserContact::MAX_REQUEST_COUNT) {
3
      if (time() - $this->requested_at>=60) {
4
        return true;
5
      } else {
6
          return Yii::t('frontend','Sorry, you must wait a minute between requests.');
7
      }
8
    } else {
9
      return Yii::t('frontend','You have exceeded the maximum number of attempts.');
10
    }
11
  }

Je les fais attendre une minute entre les tentatives de réduire les abus.

Transmettre le code de vérification

Si elle est autorisée, elle appelle requestCode():

1
public function requestCode() {
2
    $this->verify_code = rand(0,9999);
3
    $this->requested_at = time();
4
    $this->request_count+=1;
5
    $this->update();
6
    $sms = new Sms;
7
    $sms->transmit($this->info,Yii::t('frontend',
8
        'Please return to the site and type in {code}',['code'=>sprintf("%04d",$this->verify_code)]));
9
  }

Voici ce qui suit:

  • Génère un code aléatoire à quatre chiffres.
  • Il enregistre le dernier moment dans le temps (unix secondes) qu'une demande de vérification a été faite.
  • Il augmente les tentatives de vérification pour ce nombre.
  • Et il stocke tout cela dans la base de données.
  • Ensuite, il transmet un message avec le code qui ressemble à l'image ci-dessous.
How to Verify a Phone Number via SMS - Text message with verification codeHow to Verify a Phone Number via SMS - Text message with verification codeHow to Verify a Phone Number via SMS - Text message with verification code

Après avoir demandé le code, enregistrez le dans la base de données en arrière-plan et transmettez le code à l'utilisateur, il charge le formulaire suivant en demandant le code:

How to Verify a Phone Number via SMS - Verify Contact Form requesting codeHow to Verify a Phone Number via SMS - Verify Contact Form requesting codeHow to Verify a Phone Number via SMS - Verify Contact Form requesting code

Vérification du code

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

1
public function actionVerify($id)
2
{
3
    $model = $this->findModel($id);
4
    if ($model->load(Yii::$app->request->post())) {
5
        // display verification form
6
        $model->verify = Yii::$app->request->post()['UserContact']['verify'];
7
        if (strval($model->verify_code) == strval($model->verify)) {
8
          $model->status = UserContact::STATUS_VERIFIED;
9
          $model->update();
10
          Yii::$app->getSession()->setFlash('success',Yii::t('frontend','Thank you, your number is confirmed.'));
11
          return $this->redirect(['/user-contact']);
12
        } else {
13
            Yii::$app->getSession()->setFlash('error', Yii::t('frontend','Sorry, that is incorrect. Please request a new code.'));
14
            return $this->redirect(['/user-contact']);
15
        }
16
    } else {
17
      ...
18
    }
19
}

Il vérifie que les codes correspondent. Si elles le font, il met à jour la base de données pour refléter le nombre a été vérifié. Et il dit à l'utilisateur:

How to Verify a Phone Number via SMS - Successful confirmation noticeHow to Verify a Phone Number via SMS - Successful confirmation noticeHow to Verify a Phone Number via SMS - Successful confirmation notice

Sinon, il affiche un message d'erreur:

How to Verify a Phone Number via SMS - Error try again after a minuteHow to Verify a Phone Number via SMS - Error try again after a minuteHow to Verify a Phone Number via SMS - Error try again after a minute

Essayez-le vous-même

Si vous voulez 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 ajoutez un numéro de téléphone. Cliquez ensuite sur la coche dans la liste que vous verrez. C'est tout.

Finissons-en

Évidemment, si votre application envoie beaucoup de messages, c'est un coût notable de l'entreprise, et vous voulez limiter les abus. Cela commence par la mise en place d'un pare-feu contre des numéros invalides—ou des nombres valides qui ne sont pas réellement la propriété de l'imposteur.

J'espère que vous avez trouvé cela utile. Si vous avez des questions ou des suggestions, veuillez les poster dans les commentaires. Si vous désirez suivre mes futures tutoriaux Envato Tuts + et d'autres séries, veuillez visiter ma page d'instructeur ou suivez @lookahead_io. Certainement vérifiez ma série de démarrage et Meeting Planner.

Liens connexes

Advertisement
Did you find this post useful?
Want a weekly email summary?
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.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.