Advertisement
  1. Code
  2. Coding Fundamentals
  3. Authentication

Kako Verificirati Telefonski Broj Putem SMS-a

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

Uvod

U prošloj epizodi pisao sam o pripremi aplikacije za SMS koristeći Twilio, najčešće korišten servis za slanje poruka. U današnjem tutorialu ću vam pokazati kako verificirati broj korisnika prije nego što zaprimite veliku količinu poruka i samim time podignete svoje troškove.

Prije nego što počnemo, želim vas potaknuti da objavite svoja pitanja i mišljenja u komentarima. Ako želite i dalje pratiti moje tutoriale na Envato Tuts+ i druge serije, posjetite stranicu za instruktore ili pratite @lookahead_io.

Proces

Nakon što korisnik pruži svoj telefonski broj, mi ćemo napraviti nekoliko jednostavnih koraka:

  • Generirati jedinstveni četveroznamenkasti kod.
  • Pohraniti broj mobitela i četveroznamenkasti kod u našu bazu podataka (ili kriptirati kod lokalno kao varijablu- skriveni obrazac na stranici)
  • Poslati tekst na neverificirani broj sa četveroznamenkastim kodom.
  • Prikazati obrazac sa postavljenim upitom korisniku da upiše kod koji je zaprimio.
  • Verificirati da kodovi odgovaraju.
  • Pohraniti broj kao verificirani broj u bazu podataka.

Kontak Obrazac Korisnika

U Meeting Planner-u, svaki korisnik može dodati više kontakt metoda, npr. Skype, telefon, itd. Svaki broj mobitela mora biti verificiran kako bi se koristio za SMS notifikacije.

Treći red ispod pokazuje kućicu za oznaku koju oni mogu kliknuti da zatraže verifikaciju:

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

Tim klikom korisnik se prenosi na actionVerify() kontroler ispod; zapamtite da ih to prvo vodi na else blok jer još nisu zaprimili kod:

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
}

Metoda canRequest() provjerava jesu li uzastopno više puta ili prečesto tražili kodove:

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
  }

Ja ih ostavim da čekaju minutu između pokušaja kako bi se smanjila zloupotreba.

Prijenos Verifikacijskog Koda

Ako je dozvoljeno, tada zove 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
  }

To čini sljedeće:

  • Generira neki nasumce odabran četveroznamenkasti kod.
  • Snima posljednji trenutak u vremenu (unix sekunde) da je zahtjev za verifikaciju izvršen.
  • Povećava pokušaje verifikacije za ovaj broj.
  • I sve to pohranjuje  u bazu podataka.
  • Zatim, prenosi tekst sa kodom koji izgleda kao slika ispod.
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

Nakon zahtjeva koda, sprema ga u bazu podataka u pozadini  i prenosi kod korisniku, te učitava sljedeću formu gdje traži kod:

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

Verifikacija Koda

Kada korisnik pokuša dostaviti kod, pokreće gornji dio 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
}

Provjerava podudaraju li se kodovi. Ako se podudaraju, ažurira bazu podataka da označi kako je broj verificiran. I korisniku govori:

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

Ako se ne podudaraju, prikazuje 'error' poruku:

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

Pokušajte Sami

Ako želite vidjeti kako se ovo radi, prijavite se na Simple Planner ili Meeting Planner (što je jednostavno sa računima društvenih mreža kao što su Facebook ili Google) i dodajte broj telefona. Zatim na listi koju ćete vidjeti kliknite kućicu za označivanje. To je to.

Zaključak

Očito, ako vaša aplikacija šalje mnogo tekstualnih poruka, to vam značajno podiže troškove poslovanja, a zasigurno želite smanjiti zloupotrebu. Tu prvo počinjete sa podešavanjem firewalla protiv nevažećih brojeva - ili važećih brojeva koje osoba koja želi počiniti zloporabu, zapravo ne posjeduje.

Nadam se da će vam ovo o čemu smo pisali biti od koristi. Ukoliko imate kakvih pitanja ili prijedloga, svakako ih objavite u komentarima. Ako želite nastaviti pratiti moje buduće Envato Tuts+ tutoriale i druge serije, molim Vas posjetite moju stranicu za instruktore ili pratite @lookahead_io. Svakako pogledajte moje serije za početnike i Meeting Planner.

Linkovi vezani za temu

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.