Så här verifierar du ett telefonnummer via SMS

Vad du ska skapa

Introduktion

I det tidigare avsnittet skrev jag om att förbereda din ansökan om SMS med Twilio, en vanlig textningstjänst. I dagens handledning visar jag dig hur du verifierar användarnumren innan du skickar en hög volym text och kör dina kostnader.

Innan vi börjar, vill jag uppmuntra dig att skicka frågor och återkoppling i kommentarerna. Om du vill hålla koll på mina framtida Envato Tuts + handledning och andra serier, besök min instruktörssida eller följ @lookahead_io.

Förklara processen

När användaren ger sitt telefonnummer vill vi utföra en handfull enkla steg:

  • Skapa en unik fyrsiffrig kod.
  • Förvara deras mobilnummer och den fyrsiffriga koden i vår databas (eller kryptera koden lokalt som en dold form variabel på sidan).
  • Skicka en text till det obekräftade numret med den fyrsiffriga koden.
  • Visa ett formulär som ber användaren att ange koden som de mottog.
  • Verifiera koderna matcha.
  • Ange numret som verifierat i databasen.

Användarens kontaktsida

I mötesplanerare kan varje användare lägga till flera kontaktmetoder, t.ex. Skype, telefon, etc. Varje cellnummer måste verifieras för att användas för sms-meddelanden.

Den tredje raden nedan visar en kryssruta som de kan klicka för att begära verifiering:

Genom att klicka på det överför användaren till actionVerify () kontrollern nedan; notera att det tar dem till annan blockera först eftersom de ännu inte har lagt fram en kod:

public function actionVerify ($ id) $ model = $ this-> findModel ($ id); om ($ model-> load (Yii :: $ app-> request-> post ())) ... annars $ canRequest = $ model-> canRequest (); om ($ canRequest) // skicka en text till detta nummer $ model-> requestCode (); returnera $ this-> render ('verify', ['model' => $ modell,]);  annat Yii :: $ app-> getSession () -> setFlash ('error', $ canRequest); returnera $ this-> omdirigering (['/ user-contact']); 

Metoden canRequest () kontrollerar om de har begärt koder upprepade gånger eller för ofta:

public function canRequest () if ($ this-> request_countrequested_at> = 60) return true;  annars returnera Yii :: t ('frontend', 'Tyvärr, du måste vänta en minut mellan förfrågningar.');  annars returnera Yii :: t ('frontend', 'Du har överskridit det maximala antalet försök.'); 

Jag får dem att vänta en minut mellan försök att minska missbruk.

Överföring av verifieringskoden

Om det är tillåtet ringer det begär kod():

public function requestCode () $ this-> verify_code = rand (0,9999); $ this-> requested_at = time (); $ This-> request_count + = 1; $ This-> uppdatering (); $ sms = ny sms; $ sms-> överför ($ this-> info, Yii :: t ('frontend', 'Vänligen återvänd till webbplatsen och skriv in code', ['code' => sprintf ("% 04d", $ this -> verify_code)])); 

Detta gör följande:

  • Genererar en slumpmässig fyrsiffrig kod.
  • Den registrerar sista ögonblicket i tid (unix sekunder) att en begäran om verifiering gjordes.
  • Det ökar försöket för verifiering för detta nummer.
  • Och det lagrar allt detta i databasen.
  • Sedan sänder den en text med koden som ser ut som bilden nedan.

Efter att ha begärt koden, spara den i databasen bakom kulisserna och sänder koden till användaren laddar den följande formulär och frågar efter koden:

Verifiering av koden

När användaren försöker skriva in en kod kör den den övre delen av actionVerify ():

public function actionVerify ($ id) $ model = $ this-> findModel ($ id); om $ model-> load (Yii :: $ app-> request-> post ())) // display verifieringsformulär $ model-> verify = Yii :: $ app-> request-> post () [' UserContact '] [' kontrollera ']; om (strval ($ model-> verify_code) == strval ($ model-> verifiera)) $ model-> status = UserContact :: STATUS_VERIFIED; $ Modell-> uppdatering (); Yii :: $ app-> getSession () -> setFlash ('framgång', Yii :: t ('frontend', 'Tack, ditt nummer bekräftas.')); returnera $ this-> omdirigering (['/ user-contact']);  annat Yii :: $ app-> getSession () -> setFlash ('error', Yii :: t ('frontend', 'Tyvärr, det är felaktigt. Vänligen be om en ny kod.')); returnera $ this-> omdirigering (['/ user-contact']);  annat ...

Det kontrollerar att koderna matchar. Om de gör det uppdateras databasen för att spegla numret har verifierats. Och det berättar användaren:

Om inte, visas ett felmeddelande:

Prova själv

Om du vill se detta i åtgärd kan du anmäla dig till Simple Planner eller Meeting Planner (vilket är enkelt med ett socialt konto som Facebook eller Google) och lägg till ett telefonnummer. Klicka sedan på kryssrutan i listan som du kommer att se. Det är allt.

Avslutar

Självklart, om din ansökan skickar många textmeddelanden är det en anmärkningsvärd kostnad för verksamheten, och du vill begränsa missbruk. Det börjar med att installera en brandvägg mot ogiltiga siffror - eller giltiga nummer som inte egentligen ägs av bedragaren.

Jag hoppas att du fann det här till hjälp. Om du har några frågor eller förslag, vänligen skicka in dem i kommentarerna. Om du vill hålla koll på mina framtida Envato Tuts + handledning och andra serier, besök min instruktörssida eller följ @lookahead_io. Kolla in min start-serie och mötesplanerare.

relaterade länkar

  • Förberedelser för textmeddelanden (Envato Tuts +)
  • Programmering med Yii2-serien (Envato Tuts +)
  • Yii2 Developer Exchange