Selle juhendi abil käivitage oma Pythoni rakenduses OTP-kinnitussüsteem ja käivitage see.

Isegi kui teie parool varastatakse, on OTP-kinnitussüsteemid turvalisuse tagamisel ülioluline tegur. See välistab vajaduse paroole meeles pidada, toimib täiendava turvakihina ja vähendab andmepüügi riske.

Õppige Pythoni abil koostama OTP-kinnitussüsteemi, mis saadab teile teie mobiiltelefoninumbrile OTP kehtib ainult kaks minutit ja teie konto lukustatakse, kui sisestate a-sse kolm korda vale OTP rida.

Installige Tkinteri, Twilio ja juhuslikud moodulid

Tkinter võimaldab teil seda teha luua töölauarakendusi. See pakub mitmesuguseid vidinaid, nagu nupud, sildid ja tekstikastid, mis hõlbustavad rakenduste arendamist.

Twilio moodul aitab teil seda teha integreerida sidefunktsioonid nagu SMS, MMS-id, telefonikõned ja kinnitus otse teie rakendusse. Sellel on pilvepõhine infrastruktuur koos hämmastavate funktsioonidega, nagu numbrite varustamine, sõnumimallid ja kõnede salvestamine.

Twilio ja Tkinteri moodulite installimiseks käivitage terminalis järgmine käsk:

instagram viewer
pip install twilio tk

Juhuslik moodul on sisseehitatud Pythoni moodul, mida kasutatakse pseudojuhuslike arvude genereerimiseks. Selle abil saate genereerida juhuslikke numbreid, valida loendist juhuslikke elemente, segada loendi sisu ja palju muud. Saate seda kasutada täringuviske simulatsiooni, loendi segaja või a juhusliku parooli generaator.

Looge Twilio API ja hankige telefoninumber

Twilio kasutamiseks ja OTP-päringute saatmiseks mobiiltelefoni vajate autentimismandaate ja Twilio telefoninumbrit. Selle saavutamiseks toimige järgmiselt.

  1. Registreerige Twilio konto ja külastage Twilio konsool.
  2. Kerige alla ja klõpsake nuppu Hangi telefoninumber nuppu. Kopeerige loodud telefoninumber.
  3. Kerige alla jaotiseni Konto andmed osa. Kopeerige Konto SID ja Auth Token.

Rakenduse struktuuri loomine

Siit leiate kogu lähtekoodi Pythoni abil OTP-kinnitussüsteemi loomiseks GitHubi hoidla.

Importige vajalikud moodulid ja määrake autentimismandaadid. Initsialiseerige Twilio klient autentimiseks ja API-kõnede sisenemispunktiks. Määrake aegumisajaks kaks minutit.

Määratlege klass, OTP-kinnitus, ja lähtestage konstruktor muutujate vaikeväärtuste määramiseks koos juurakna lähtestamisega ning rakenduse pealkirja ja mõõtmete määramisega.

import tkinter as tk
from tkinter import messagebox
from twilio.rest import Client
import random
import threading
import time

account_sid = "YOUR_ACCOUNT_SID"
auth_token = "YOUR_AUTH_TOKEN"
client = Client(account_sid, auth_token)
expiration_time = 120

classOTPVerification:
def__init__(self, master):
self.master = master
self.master.title('OTP Verification')
self.master.geometry("600x275")
self.otp = None
self.timer_thread = None
self.resend_timer = None
self.wrong_attempts = 0
self.locked = False
self.stop_timer = False

Määrake kolm silti, et küsida mobiiltelefoni numbrit ja OTP-d ning kuvada taimer pärast seda, kui programm saadab OTP. Määrake ülemelement, tekst, mida see peaks kuvama, ja fondi stiilid. Samamoodi looge kasutajalt sisendi saamiseks kaks sisestusvidinat. Määrake selle emaelement, laius ja kirjastiilid.

Looge kolm nuppu OTP saatmiseks, OTP uuesti saatmiseks ja OTP kinnitamiseks. Määrake selle ülemelement, kuvatav tekst, klõpsamisel käivitatav käsk ja fondi stiilid. Korraldage need elemendid kasutades pakkima meetod.

 self.label1 = tk.Label(self.master, 
text='Enter your mobile number:',
font=('Arial', 14))
self.label1.pack()

self.mobile_number_entry = tk.Entry(self.master,
width=20,
font=('Arial', 14))
self.mobile_number_entry.pack()

self.send_otp_button = tk.Button(self.master,
text='Send OTP',
command=self.send_otp,
font=('Arial', 14))
self.send_otp_button.pack()

self.timer_label = tk.Label(self.master,
text='',
font=('Arial', 12, 'bold'))
self.timer_label.pack()

self.resend_otp_button = tk.Button(self.master,
text='Resend OTP',
state=tk.DISABLED,
command=self.resend_otp,
font=('Arial', 14))
self.resend_otp_button.pack()

self.label2 = tk.Label(self.master,
text='Enter OTP sent to your mobile:',
font=('Arial', 14))
self.label2.pack()

self.otp_entry = tk.Entry(self.master,
width=20,
font=('Arial', 14))
self.otp_entry.pack()

self.verify_otp_button = tk.Button(self.master,
text='Verify OTP',
command=self.verify_otp,
font=('Arial', 14))
self.verify_otp_button.pack()

Rakenduse funktsionaalsuse loomine

Määratlege meetod, start_timer() mis jookseb timer_countdown eraldi lõimes.

defstart_timer(self):
self.timer_thread = threading.Thread(target=self.timer_countdown)
self.timer_thread.start()

Määratlege meetod, timer_countdown(). Salvestage algusaeg ja käivitage lõpmatu tsükkel, mis võtab praeguse aja ning arvutab välja kulunud ja järelejäänud aja. Kui stop_taimer on tõsi, lõpetage silmus. Kui järelejäänud aeg on nullist väiksem või sellega võrdne, kuvage veateate kast, mis ütleb, et OTP on aegunud.

Aktiveerige nupp Saada OTP uuesti, määrake OTP väärtuseks None ja lõpetage. Muul juhul arvutage järelejäänud minutid ja sekundid, kuvage see taimeri sildil ja jääge üheks sekundiks magama.

deftimer_countdown(self):
start_time = time.time()
whileTrue:
current_time = time.time()
elapsed_time = current_time - start_time
remaining_time = expiration_time - elapsed_time
if self.stop_timer:
break
if remaining_time <= 0:
messagebox.showerror('Error', 'OTP has expired.')
self.resend_otp_button.config(state=tk.NORMAL)
self.otp = None
break
minutes = int(remaining_time // 60)
seconds = int(remaining_time % 60)
timer_label = f'Time Remaining: {minutes:02d}:{seconds:02d}'
self.timer_label.config(text=timer_label)
time.sleep(1)

Määratlege meetod, send_otp(). Kui lukus on tõene, kuvage vastav teade. Muul juhul eraldage telefoninumber, kinnitage see ja looge juhuslik OTP. Edastage varem saadud mobiiltelefon ja saatke kliendi kaudu OTP oma telefoninumbrile. Kuvage teatekast, käivitage taimer, keelake nupud ja tühjendage sisestus täielikult.

defsend_otp(self):
if self.locked:
messagebox.showinfo('Account Locked', 'Your account is locked. Try again later.')
return
mobile_number = self.mobile_number_entry.get()
ifnot mobile_number:
messagebox.showerror('Error', 'Please enter your mobile number.')
return

self.otp = random.randint(1000, 9999)
message = client.messages.create(
body=f'Your OTP is {self.otp}.',
from_='TWILIO_MOBILE_NUMBER',
to=mobile_number
)
messagebox.showinfo('OTP Sent', f'OTP has been sent to {mobile_number}.')
self.start_timer()
self.send_otp_button.config(state=tk.DISABLED)
self.resend_otp_button.config(state=tk.DISABLED)
self.otp_entry.delete(0, tk.END)

Määratlege meetod, resend_otp(). Kui see on lukus, kuvage vastav teade. Vastasel juhul hankige telefoninumber, kinnitage see, looge uuesti juhuslik OTP, saatke OTP uuesti, kuvage teatekast, käivitage taimer ja keelake nupp Saada OTP uuesti.

defresend_otp(self):
if self.locked:
messagebox.showinfo('Account Locked', 'Your account is locked. Try again later.')
return
mobile_number = self.mobile_number_entry.get()
ifnot mobile_number:
messagebox.showerror('Error', 'Please enter your mobile number.')
return

self.otp = random.randint(1000, 9999)
message = client.messages.create(
body=f'Your OTP is {self.otp}.',
from_='TWILIO_MOBILE_NUMBER',
to=mobile_number
)
messagebox.showinfo('OTP Sent', f'New OTP has been sent to {mobile_number}.')
self.start_timer()
self.resend_otp_button.config(state=tk.DISABLED)

Määratlege meetod, verify_otp(). Hankige OTP ja kontrollige, kas kasutaja pole midagi sisestanud. Kui salvestatud OTP on Mitte ühtegi, paluge kasutajal esmalt genereerida OTP. Kui kasutaja sisestatud OTP ühtib salvestatuga, kuvage edukas OTP kinnitusteade, peatage taimer ja väljuge programmist. Vastasel juhul kontrollige valesid katseid. Kui valede katsete arv ületab kolme, lukustage konto.

defverify_otp(self):
user_otp = self.otp_entry.get()
ifnot user_otp:
messagebox.showerror('Error', 'Please enter OTP.')
return
if self.otp isNone:
messagebox.showerror('Error', 'Please generate OTP first.')
return
if int(user_otp) == self.otp:
messagebox.showinfo('Success', 'OTP verified successfully.')
self.stop_timer = True
exit()
else:
self.wrong_attempts += 1
if self.wrong_attempts == 3:
self.lock_account()
else:
messagebox.showerror('Error', 'OTP does not match.')

Määratlege meetod, lock_account(). Määrake lukustatud olek tõeseks ja kuvage silt kui Konto lukus. Keela kõik sildid, kirjed ja nupud. Peatage olemasolev taimer ja käivitage kümneks minutiks uus.

deflock_account(self):
self.locked = True
self.label1.config(text='Account Locked')
self.mobile_number_entry.config(state=tk.DISABLED)
self.send_otp_button.config(state=tk.DISABLED)
self.timer_label.config(text='')
self.resend_otp_button.config(state=tk.DISABLED)
self.label2.config(text='')
self.otp_entry.config(state=tk.DISABLED)
self.verify_otp_button.config(state=tk.DISABLED)
self.stop_timer = True
countdown_time = 10 * 60
self.start_countdown(countdown_time)

Määratlege meetod start_countdown(). Kui järelejäänud aeg on nullist väiksem või sellega võrdne, lähtestage konto. Vastasel juhul kuvage teade, et programm on konto lukustanud, ja proovige järelejäänud aja jooksul uuesti, kasutades tagasihelistamist.

defstart_countdown(self, remaining_time):
if remaining_time <= 0:
self.reset_account()
return

minutes = int(remaining_time // 60)
seconds = int(remaining_time % 60)
timer_label = f'Account Locked. Try again in: {minutes:02d}:{seconds:02d}'
self.timer_label.config(text=timer_label)
self.master.after(1000, self.start_countdown, remaining_time - 1)

Määratlege funktsioon, konto lähtestamine(). Lähtestage kõigi vidinate ja muutujate olek nagu varem.

defreset_account(self):
self.locked = False
self.wrong_attempts = 0
self.label1.config(text='Enter your mobile number:')
self.mobile_number_entry.config(state=tk.NORMAL)
self.send_otp_button.config(state=tk.NORMAL)
self.timer_label.config(text='')
self.resend_otp_button.config(state=tk.DISABLED)
self.label2.config(text='Enter OTP sent to your mobile:')
self.otp_entry.config(state=tk.NORMAL)
self.verify_otp_button.config(state=tk.NORMAL)
self.stop_timer = False

Looge juuraken, klassi eksemplar ja käivitage rakendus Tkinter.

if __name__ == '__main__':
root = tk.Tk()
otp_verification = OTPVerification(root)
root.mainloop()

OTP-ga kinnitamise väljundi näide

OTP verifitseerimisprogrammi käivitamisel kuvatakse aken, kus palutakse sisestada oma mobiiltelefoni number. Sisestage see koos riigi koodiga ja vajutage nuppu Saada OTP nuppu. Saate teate, et programm on OTP edukalt saatnud ja nupp desaktiveerub kaheks minutiks. Kontrollige oma telefonis OTP-d ja sisestage see enne selle aegumist.

Õige OTP sisestamisel enne taimeri otsa lõppemist kuvatakse teade, et programm on OTP-d edukalt kontrollinud ja programm väljub. Kui te ei sisestanud seda õigel ajal, kuvatakse teile teade, mis ütleb, et OTP on aegunud. Võite klõpsata nupul Saada OTP uuesti nuppu, et luua uus OTP ja saata see oma telefoni.

Kui sisestate vale OTP, kuvab programm teatekasti OTP ei sobi.

Kui sisestate kolm korda vale OTP, blokeeritakse kõik väljad ja konto lukustatakse kümneks minutiks.

Twilio kasutamine Pythoniga

Twilio abil saate erinevate sündmuste jaoks luua SMS-teavitussüsteemi. Saate seda kasutada IoT-seadmetega SMS-ide käivitamiseks, kui midagi langeb teatud lävest kõrgemale või allapoole või kui avastate sissetungija. Saate luua kahefaktorilise autentimisega turvalisi sisselogimissüsteeme, luua WhatsAppi vestlusroti ja kohtumiste meeldetuletussüsteemi.

Peale selle saate seda kasutada telefoninumbri kinnitamiseks, turunduskampaaniateks, uuringute saatmiseks ja tagasiside kogumiseks. Rakenduste loomisel pidage alati silmas Twilio API hinda, et vältida ootamatuid kulusid.