Kako Verificirati Telefonski Broj Putem SMS-a
() translation by (you can also view the original English article)



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:



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.



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



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:



Ako se ne podudaraju, prikazuje 'error' poruku:



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.