Slik bekrefter du et telefonnummer via SMS

Hva du skal skape

Introduksjon

I den tidligere episoden skrev jeg om å forberede din søknad om SMS ved hjelp av Twilio, en vanlig tekstingstjeneste. I dagens veiledning viser jeg deg hvordan du verifiserer brukernumre før du sender et høyt volum av tekster og kjører opp kostnadene dine.

Før vi kommer i gang, vil jeg oppfordre deg til å stille spørsmål og tilbakemelding i kommentarene. Hvis du vil fortsette med fremtidige Envato Tuts + opplæringsprogrammer og andre serier, vennligst besøk min instruktørside eller følg @lookahead_io.

Beskriver prosessen

Etter at brukeren har gitt sitt telefonnummer, vil vi utføre en rekke enkle trinn:

  • Generer en unik firesifret kode.
  • Oppbevar deres celle nummer og den firesifrede koden i vår database (eller krypter koden lokalt som en skjult formvariabel på siden).
  • Send en tekst til det ubekreftede nummeret med den firesifrede koden.
  • Vis et skjema som ber brukeren om å gi koden de mottok.
  • Bekreft kodene samsvarer.
  • Oppgi nummeret som bekreftet i databasen.

Brukerens kontaktside

I møteplanleggeren kan hver bruker legge til flere kontaktmetoder, f.eks. Skype, telefon, etc. Hvert celle nummer må verifiseres for å bli brukt til SMS-varsler.

Den tredje raden nedenfor viser en avmerkingsboks som de kan klikke for å be om bekreftelse:

Klikking som overfører brukeren til actionVerify () kontrolleren nedenfor; Legg merke til at det tar dem til ellers blokkere først fordi de ikke har sendt inn en kode ennå:

offentlig funksjon actionVerify ($ id) $ model = $ this-> findModel ($ id); hvis ($ modell-> last (Yii :: $ app-> forespørsel-> post ())) ... annet $ canRequest = $ model-> canRequest (); hvis ($ canRequest) // send en tekst til dette nummeret $ model-> requestCode (); returnere $ this-> render ('verifisere', ['model' => $ modell,]);  ellers Yii :: $ app-> getSession () -> setFlash ('error', $ canRequest); returnere $ this-> omdirigering (['/ user-contact']); 

Metoden canRequest () sjekker om de har forespurt koder gjentatte ganger eller for ofte:

Offentlig funksjon canRequest () if ($ this-> request_countrequested_at> = 60) return true;  ellers return Yii :: t ('frontend', 'Beklager, du må vente et minutt mellom forespørsler.');  else return Yii :: t ('frontend', 'Du har overskredet maksimalt antall forsøk.'); 

Jeg gjør dem vente et øyeblikk mellom forsøk på å redusere misbruk.

Sender bekreftelseskoden

Hvis det er tillatt, ringer det forespørselskode():

public function requestCode () $ this-> verify_code = rand (0,9999); $ this-> requested_at = time (); $ Dette-> request_count + = 1; $ Dette-> oppdateringen (); $ sms = nytt sms; $ sms-> send ($ this-> info, Yii :: t ('frontend', 'Vennligst gå tilbake til nettstedet og skriv inn code', ['code' => sprintf ("% 04d", $ dette -> verify_code)])); 

Dette gjør følgende:

  • Genererer en tilfeldig firesifret kode.
  • Det registrerer siste øyeblikk i tid (unix sekunder) at en forespørsel om å bekrefte ble gjort.
  • Det øker forsøkene på bekreftelse for dette nummeret.
  • Og det lagrer alt dette i databasen.
  • Deretter overfører den en tekst med koden som ser ut som bildet nedenfor.

Etter at du har spurt koden, lagret den i databasen bak kulissene og overfører koden til brukeren laster den følgende skjema og ber om koden:

Bekreft koden

Når brukeren forsøker å sende inn en kode, kjører den den øvre delen av actionVerify ():

offentlig funksjon actionVerify ($ id) $ model = $ this-> findModel ($ id); hvis ($ model-> load (Yii :: $ app-> request-> post ())) // skjerm verifiseringsskjema $ model-> verifiser = Yii :: $ app-> request-> post () [' UserContact '] [' verifisere ']; hvis (strval ($ model-> verify_code) == strval ($ model-> verifiser)) $ model-> status = UserContact :: STATUS_VERIFIED; $ Modell> oppdateringen (); Yii :: $ app-> getSession () -> setFlash ('suksess', Yii :: t ('frontend', 'Takk, nummeret ditt er bekreftet.')); returnere $ this-> omdirigering (['/ user-contact']);  ellers Yii :: $ app-> getSession () -> setFlash ('error', Yii :: t ('frontend', 'Beklager, det er feil. Vennligst be om en ny kode.')); returnere $ this-> omdirigering (['/ user-contact']);  annet ...

Det kontrollerer at kodene samsvarer. Hvis de gjør det, oppdaterer den databasen for å gjenspeile nummeret er bekreftet. Og det forteller brukeren:

Hvis ikke, viser det en feilmelding:

Prøv det selv

Hvis du vil se dette i gang, kan du registrere deg på Simple Planner eller Meeting Planner (som er enkelt med en sosial konto som Facebook eller Google) og legg til et telefonnummer. Deretter klikker du avkrysset i listen som du vil se. Det er det.

Wrapping Up

Selvfølgelig, hvis søknaden din sender mange tekstmeldinger, er det en bemerkelsesverdig kostnad for virksomheten, og du vil begrense misbruk. Det begynner med å sette opp en brannmur mot ugyldige tall - eller gyldige tall som ikke egentlig eies av bedrageren.

Jeg håper du fant dette nyttig. Hvis du har spørsmål eller forslag, vennligst legg inn dem i kommentarene. Hvis du vil fortsette med fremtidige Envato Tuts + opplæringsprogrammer og andre serier, vennligst besøk min instruktørside eller følg @lookahead_io. Sjekk sjekk ut min oppstartsserie og møteplanlegger.

Relaterte linker

  • Forbereder tekstmeldinger (Envato Tuts +)
  • Programmering med Yii2-serien (Envato Tuts +)
  • Yii2 Developer Exchange