Een telefoonnummer verifiëren via sms

Wat je gaat creëren

Invoering

In de vorige aflevering schreef ik over het voorbereiden van je sms-aanvraag met Twilio, een veelgebruikte sms-service. In de tutorial van vandaag laat ik zien hoe u de telefoonnummers van gebruikers kunt verifiëren voordat u een groot aantal teksten verzendt en uw kosten verhoogt.

Voordat we beginnen, wil ik u aanmoedigen om vragen en feedback in de opmerkingen te plaatsen. Als je graag mijn toekomstige Envato Tuts + tutorials en andere series wilt volgen, ga dan naar mijn instructeurspagina of volg @lookahead_io.

Het proces schetsen

Nadat de gebruiker zijn telefoonnummer heeft opgegeven, willen we een handvol eenvoudige stappen uitvoeren:

  • Genereer een unieke viercijferige code.
  • Bewaar hun mobiele nummer en de viercijferige code in onze database (of codeer de code lokaal als een verborgen formuliervariabele op de pagina).
  • Stuur een tekst naar het niet-geverifieerde nummer met de viercijferige code.
  • Geef een formulier weer waarin de gebruiker wordt gevraagd om de code die hij heeft ontvangen door te geven.
  • Controleer of de codes overeenkomen.
  • Geef het nummer aan als geverifieerd in de database.

De contactpagina van de gebruiker

In Meeting Planner kan elke gebruiker meerdere contactmethoden toevoegen, bijvoorbeeld Skype, telefoon, etc. Elk celnummer moet worden geverifieerd om te worden gebruikt voor SMS-meldingen.

De derde rij hieronder toont een vinkje waar ze op kunnen klikken om verificatie aan te vragen:

Als u hierop klikt, gaat de gebruiker over naar de actionVerify () controller hieronder; merk op dat het hen meeneemt naar de anders eerst blokkeren omdat ze nog geen code hebben verzonden:

public function actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) ... else $ canRequest = $ model-> canRequest (); if ($ canRequest) // stuur een sms naar dit nummer $ model-> requestCode (); return $ this-> render ('verify', ['model' => $ model,]);  else Yii :: $ app-> getSession () -> setFlash ('error', $ canRequest); return $ this-> redirect (['/ user-contact']); 

De methode canRequest () controleert of ze herhaaldelijk of te vaak codes hebben aangevraagd:

openbare functie canRequest () if ($ this-> request_countrequested_at> = 60) return true;  else return Yii :: t ('frontend', 'Sorry, je moet een minuutje wachten tussen de verzoeken.');  else return Yii :: t ('frontend', 'U heeft het maximale aantal pogingen overschreden.'); 

Ik laat ze een minuutje wachten tussen pogingen om misbruik te verminderen.

De verificatiecode verzenden

Indien toegestaan, wordt er gebeld Verzoek code():

openbare functie requestCode () $ this-> verify_code = rand (0,9999); $ this-> requested_at = time (); $ This-> request_count + = 1; $ This-> update (); $ sms = nieuwe sms; $ sms-> verzenden ($ this-> info, Yii :: t ('frontend', 'Keer terug naar de site en typ code', ['code' => sprintf ("% 04d", $ this -> verify_code)])); 

Dit doet het volgende:

  • Genereert een willekeurige viercijferige code.
  • Het registreert het laatste moment in de tijd (unix seconden) dat een verzoek om te verifiëren werd gedaan.
  • Het verhoogt de verificatiepogingen voor dit nummer.
  • En het slaat dit allemaal op in de database.
  • Vervolgens verzendt het een tekst met de code die op de onderstaande afbeelding lijkt.

Na het opvragen van de code, het achter de schermen opslaan in de database en het verzenden van de code naar de gebruiker, wordt het volgende formulier geladen waarin om de code wordt gevraagd:

De code verifiëren

Wanneer de gebruiker probeert een code in te dienen, wordt het bovenste gedeelte van uitgevoerd actionVerify ():

public function actionVerify ($ id) $ model = $ this-> findModel ($ id); if ($ model-> load (Yii :: $ app-> request-> post ())) // weergave verificatieformulier $ model-> verify = Yii :: $ app-> request-> post () [' UserContact '] [' verifiëren ']; if (strval ($ model-> verify_code) == strval ($ model-> verify)) $ model-> status = UserContact :: STATUS_VERIFIED; $ Model-> update (); Yii :: $ app-> getSession () -> setFlash ('succes', Yii :: t ('frontend', 'Bedankt, uw nummer is bevestigd.')); return $ this-> redirect (['/ user-contact']);  else Yii :: $ app-> getSession () -> setFlash ('error', Yii :: t ('frontend', 'Sorry, dat is onjuist, vraag een nieuwe code aan.')); return $ this-> redirect (['/ user-contact']);  else ...

Het controleert of de codes overeenkomen. Als dit het geval is, wordt de database bijgewerkt om aan te geven dat het nummer is geverifieerd. En het vertelt de gebruiker:

Zo niet, dan verschijnt er een foutmelding:

Probeer het zelf

Als je dit in actie wilt zien, kun je je aanmelden bij Simple Planner of Meeting Planner (wat gemakkelijk is met een sociaal account zoals Facebook of Google) en een telefoonnummer toevoegen. Klik vervolgens op het vinkje in de lijst die u zult zien. Dat is het.

Afsluiten

Het is duidelijk dat als uw app veel sms-berichten verzendt, dit een aanzienlijke kostenpost is en u misbruik wilt beperken. Dat begint met het opzetten van een firewall tegen ongeldige nummers of geldige nummers die niet het eigendom zijn van de bedrieger.

Ik hoop dat je dit nuttig hebt gevonden. Als je vragen of suggesties hebt, plaats deze dan in de comments. Als je graag mijn toekomstige Envato Tuts + tutorials en andere series wilt volgen, ga dan naar mijn instructeurspagina of volg @lookahead_io. Bekijk zeker mijn opstartserie en Meeting Planner.

Gerelateerde Links

  • Tekstberichten voorbereiden (Envato Tuts +)
  • Programmeren met de Yii2-serie (Envato Tuts +)
  • Yii2 Developer Exchange