Állítsa be és futtassa az OTP-ellenőrző rendszert Python-alkalmazásában ennek az útmutatónak a segítségével.
Még akkor is, ha jelszavát ellopják, az OTP-ellenőrző rendszerek kulcsfontosságú tényezőként szolgálnak a biztonság szempontjából. Kiküszöböli a jelszavak emlékezésének szükségességét, extra biztonsági rétegként szolgál, és csökkenti az adathalászat kockázatát.
Tanuljon meg felépíteni egy OTP-ellenőrző rendszert a Python használatával, amely OTP-t küld a mobilszámára csak két percig érvényes, és fiókja zárolva lesz, ha háromszor rossz OTP-t ad meg a sor.
Telepítse a Tkinter, Twilio és Random modulokat
A Tkinter lehetővé teszi asztali alkalmazások létrehozása. Számos widgetet kínál, például gombokat, címkéket és szövegdobozokat, amelyek megkönnyítik az alkalmazások fejlesztését.
A Twilio modul segít ebben integrálja a kommunikációs funkciókat, például az SMS-t, MMS, telefonhívások és ellenőrzés közvetlenül az alkalmazásba. Felhőalapú infrastruktúrával rendelkezik, olyan csodálatos funkciókkal együtt, mint a számok biztosítása, az üzenetsablonok és a hívásrögzítés.
A Twilio és Tkinter modulok telepítéséhez futtassa a következő parancsot a terminálon:
pip install twilio tk
A Random modul egy beépített Python modul, amelyet pszeudo-véletlen számok generálására használnak. Ezzel véletlenszerű számokat generálhat, véletlenszerű elemeket választhat ki a listából, keverheti a listák tartalmát stb. Használhatja kockadobás szimuláció, listakeverő vagy a véletlenszerű jelszó generátor.
Hozza létre a Twilio API-t, és kérjen telefonszámot
A Twilio használatához és az OTP-kérések mobiltelefonjára való küldéséhez hitelesítési adatokra és egy Twilio-telefonszámra van szükség. Elérni ezt:
- Regisztráljon egy Twilio-fiókot, és keresse fel a Twilio konzol.
- Görgessen le, és kattintson a Szerezzen telefonszámot gomb. Másolja ki a generált telefonszámot.
- Görgessen le a Számlainformáció szakasz. Másolja a Fiók SID és a Auth Token.
Az alkalmazás szerkezetének felépítése
Ebben megtalálja a teljes forráskódot az OTP-ellenőrző rendszer Python használatával történő felépítéséhez GitHub adattár.
Importálja a szükséges modulokat és állítsa be a hitelesítési adatokat. Inicializálja a Twilio klienst a hitelesítéshez, és az API-hívások belépési pontja legyen. Állítsa be a lejárati időt két percre.
Határozzon meg egy osztályt, OTP-ellenőrzés, és inicializálja a konstruktort a változók alapértelmezett értékeinek beállításához, valamint a gyökérablak inicializálásához, valamint az alkalmazás címének és méreteinek beállításához.
import tkinter as tk
from tkinter import messagebox
from twilio.rest import Client
import random
import threading
import timeaccount_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
Határozzon meg három címkét a mobilszám és az OTP kéréséhez, valamint az időzítő megjelenítéséhez, miután a program OTP-t küld. Állítsa be a szülőelemet, a megjelenítendő szöveget és a betűstílusokat. Hasonlóképpen, hozzon létre két beviteli widgetet, hogy megkapja a felhasználótól származó adatokat. Állítsa be a szülőelemét, a szélességét és a betűstílusait.
Hozzon létre három gombot az OTP küldéséhez, az OTP újraküldéséhez és az OTP ellenőrzéséhez. Állítsa be a szülőelemet, a megjelenítendő szöveget, a kattintáskor végrehajtandó parancsot és a betűstílusokat. Rendszerezze ezeket az elemeket a csomag módszer.
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()
Az alkalmazás funkcionalitásának kiépítése
Határozzon meg egy módszert, start_timer() hogy fut timer_countdown külön szálban.
defstart_timer(self):
self.timer_thread = threading.Thread(target=self.timer_countdown)
self.timer_thread.start()
Határozzon meg egy módszert, timer_countdown(). Rögzítse a kezdési időt, és futtasson egy végtelen ciklust, amely az aktuális időt veszi, és kiszámítja az eltelt és a hátralévő időt. Ha stop_timer igaz, fejezze be a hurkot. Ha a hátralévő idő nullánál kisebb vagy egyenlő, jelenítsen meg egy hibaüzenetet, amely szerint az OTP lejárt.
Aktiválja az OTP újraküldése gombot, állítsa az OTP-t none-ra, és fejezze be. Ellenkező esetben számítsa ki a hátralévő perceket és másodperceket, jelenítse meg az időzítő címkéjén, és aludjon egy másodpercig.
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)
Határozzon meg egy módszert, send_otp(). Ha zárt igaz, jelenítse meg a megfelelő üzenetet. Ellenkező esetben vegye ki a telefonszámot, érvényesítse, és generáljon egy véletlenszerű OTP-t. Adja át a korábban kapott mobiltelefonját, és a kliens segítségével küldje el az OTP-t a telefonszámára. Jelenítsen meg egy üzenetablakot, indítsa el az időzítőt, tiltsa le a gombokat, és törölje teljesen a bejegyzést.
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)
Határozzon meg egy módszert, resend_otp(). Ha zárolva van, jelenítse meg a megfelelő üzenetet. Ellenkező esetben szerezze be a telefonszámot, érvényesítse, generáljon újra egy véletlenszerű OTP-t, küldje el újra az OTP-t, jelenítse meg az üzenetmezőt, indítsa el az időzítőt, és tiltsa le az OTP újraküldése gombot.
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)
Határozzon meg egy módszert, verify_otp(). Szerezze be az OTP-t, és ellenőrizze, hogy a felhasználó nem írt-e be semmit. Ha a tárolt OTP az Egyik sem, kérje meg a felhasználót, hogy először hozza létre az OTP-t. Ha a felhasználó által megadott OTP megegyezik a tárolttal, akkor jelenítse meg a sikeres OTP-ellenőrző üzenetet, állítsa le az időzítőt, és lépjen ki a programból. Ellenkező esetben ellenőrizze a rossz próbálkozásokat. Ha a rossz próbálkozások száma meghaladja a hármat, zárolja a fiókot.
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.')
Határozzon meg egy módszert, lock_account(). Állítsa a zárolt állapotot igazra, és jelenítse meg a címkét mint Fiók zárolva. Tiltsa le az összes címkét, bejegyzést és gombot. Állítsa le a meglévő időzítőt, és indítson el egy újat tíz percre.
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)
Határozzon meg egy módszert start_countdown(). Ha a hátralévő idő nullánál kisebb vagy egyenlő, állítsa vissza a fiókot. Ellenkező esetben jelenítse meg, hogy a program zárolta a fiókot, és próbálja újra a hátralévő időben visszahívással.
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)
Határozzon meg egy függvényt, reset_account(). Állítsa vissza az összes widget és változó állapotát a korábbiak szerint.
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
Hozza létre a gyökérablakot, az osztály egy példányát, és futtassa a Tkinter alkalmazást.
if __name__ == '__main__':
root = tk.Tk()
otp_verification = OTPVerification(root)
root.mainloop()
Példa az OTP használatával történő ellenőrzés kimenetére
Az OTP Ellenőrző program futtatásakor megjelenik egy ablak, amelyben meg kell adnia mobilszámát. Írja be az országkóddal együtt, és nyomja meg a gombot OTP küldése gomb. Üzenetet kap, hogy a program sikeresen elküldte az OTP-t, és a gomb két percre deaktiválódik. Ellenőrizze a telefonon az OTP-t, és írja be, mielőtt lejár.
A megfelelő OTP megadásakor, mielőtt az időzítő lejárna, üzenetet kap, hogy a program sikeresen ellenőrizte az OTP-t, és a program kilép. Abban az esetben, ha nem adta meg időben, egy üzenetet kap, amely szerint az OTP lejárt. Rákattinthat a OTP újraküldése gombot, hogy új OTP-t generáljon és elküldje a telefonjára.
Ha rossz OTP-t ad meg, a program egy üzenetablakot jelenít meg Az OTP nem egyezik.
Ha háromszor rossz OTP-t ad meg, az összes mező letiltásra kerül, és a fiók tíz percre zárolásra kerül.
A Twilio használata Pythonnal
A Twilio segítségével SMS-értesítési rendszert építhet különféle eseményekhez. Használhatja IoT-eszközökkel SMS-ek indítására, ha valami egy bizonyos küszöb fölé vagy alá esik, vagy ha behatolót észlel. Építhet biztonságos bejelentkezési rendszereket kétfaktoros hitelesítéssel, építhet WhatsApp chatbotot és időpont-emlékeztető rendszert.
Ezen kívül használhatja telefonszám-ellenőrzéshez, marketingkampányokhoz, felmérések küldéséhez és visszajelzések gyűjtéséhez. Bármilyen alkalmazás elkészítésekor mindig ügyeljen a Twilio API áraira, hogy elkerülje a váratlan költségeket.