Bringen Sie mithilfe dieser Anleitung das OTP-Verifizierungssystem in Ihrer Python-Anwendung zum Laufen.
Selbst wenn Ihr Passwort gestohlen wird, sind OTP-Verifizierungssysteme ein entscheidender Sicherheitsfaktor. Es macht das Merken von Passwörtern überflüssig, dient als zusätzliche Sicherheitsebene und verringert das Phishing-Risiko.
Erfahren Sie, wie Sie mit Python ein OTP-Verifizierungssystem erstellen, das Ihnen ein OTP an Ihre Mobiltelefonnummer sendet ist nur zwei Minuten lang gültig und Ihr Konto wird gesperrt, wenn Sie dreimal hintereinander das falsche OTP eingeben Reihe.
Installieren Sie Tkinter-, Twilio- und Random-Module
Tkinter ermöglicht es Ihnen Desktop-Anwendungen erstellen. Es bietet eine Vielzahl von Widgets wie Schaltflächen, Beschriftungen und Textfelder, die die Entwicklung von Anwendungen erleichtern.
Das Twilio-Modul hilft Ihnen dabei Integrieren Sie Kommunikationsfunktionen wie SMS, MMS, Telefonanrufe und Verifizierung direkt in Ihre Anwendung. Es verfügt über eine cloudbasierte Infrastruktur sowie erstaunliche Funktionen wie Nummernbereitstellung, Nachrichtenvorlagen und Anrufaufzeichnung.
Um die Twilio- und Tkinter-Module zu installieren, führen Sie den folgenden Befehl im Terminal aus:
pip install twilio tk
Das Random-Modul ist ein integriertes Python-Modul, das zum Generieren von Pseudozufallszahlen verwendet wird. Damit können Sie Zufallszahlen generieren, zufällige Elemente aus einer Liste auswählen, den Inhalt einer Liste mischen und vieles mehr. Sie können damit eine Würfelwurfsimulation, einen Listenmischer oder ein anderes erstellen Zufallspasswortgenerator.
Generieren Sie die Twilio-API und rufen Sie eine Telefonnummer ab
Um Twilio zu verwenden und OTP-Anfragen an Ihr Mobiltelefon zu senden, benötigen Sie Authentifizierungsdaten sowie eine Twilio-Telefonnummer. Um das zu erreichen:
- Eröffnen Sie ein Twilio-Konto und besuchen Sie die Twilio-Konsole.
- Scrollen Sie nach unten und klicken Sie auf Rufnummer erhalten Taste. Kopieren Sie die generierte Telefonnummer.
- Scrollen Sie nach unten zum Kontoinformation Abschnitt. Kopiere das Konto-SID und das Authentifizierungstoken.
Aufbau der Struktur der Anwendung
Den gesamten Quellcode zum Aufbau eines OTP-Verifizierungssystems mit Python finden Sie hier GitHub-Repository.
Importieren Sie die erforderlichen Module und legen Sie die Authentifizierungsdaten fest. Initialisieren Sie den Twilio-Client zur Authentifizierung und als Einstiegspunkt für API-Aufrufe. Stellen Sie die Ablaufzeit auf zwei Minuten ein.
Definieren Sie eine Klasse, OTPVerifizierung, und initialisieren Sie den Konstruktor, um die Standardwerte von Variablen festzulegen, während Sie gleichzeitig das Stammfenster initialisieren und den Titel und die Abmessungen der Anwendung festlegen.
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
Definieren Sie drei Labels, um nach einer Mobiltelefonnummer und einem OTP zu fragen und um einen Timer anzuzeigen, nachdem das Programm ein OTP gesendet hat. Legen Sie das übergeordnete Element, den anzuzeigenden Text und die Schriftarten fest, die es besitzen soll. Erstellen Sie auf ähnliche Weise zwei Eintrags-Widgets, um Eingaben vom Benutzer zu erhalten. Legen Sie sein übergeordnetes Element, seine Breite und seine Schriftarten fest.
Erstellen Sie drei Schaltflächen zum Senden von OTP, zum erneuten Senden von OTP und zum Überprüfen von OTP. Legen Sie sein übergeordnetes Element, den Text, den es anzeigen soll, den Befehl, den es beim Klicken ausführen soll, und seine Schriftarten fest. Organisieren Sie diese Elemente mithilfe der Pack Methode.
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()
Aufbau der Funktionalität der Anwendung
Definieren Sie eine Methode, start_timer() das läuft timer_countdown in einem separaten Thread.
defstart_timer(self):
self.timer_thread = threading.Thread(target=self.timer_countdown)
self.timer_thread.start()
Definieren Sie eine Methode, timer_countdown(). Notieren Sie die Startzeit und führen Sie eine Endlosschleife aus, die die aktuelle Zeit verwendet und die verstrichene und verbleibende Zeit berechnet. Wenn stop_timer wahr ist, beenden Sie die Schleife. Wenn die verbleibende Zeit kleiner oder gleich Null ist, wird ein Fehlermeldungsfeld angezeigt, das besagt, dass das OTP abgelaufen ist.
Aktivieren Sie die Schaltfläche „OTP erneut senden“, setzen Sie das OTP auf „Keine“ und beenden Sie den Vorgang. Andernfalls berechnen Sie die verbleibenden Minuten und Sekunden, zeigen Sie sie auf dem Timer-Etikett an und schlafen Sie eine Sekunde lang.
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)
Definieren Sie eine Methode, send_otp(). Wenn gesperrt wahr ist, zeigen Sie die entsprechende Meldung an. Andernfalls extrahieren Sie die Telefonnummer, validieren Sie sie und generieren Sie ein zufälliges OTP. Geben Sie das Mobiltelefon weiter, das Sie zuvor erhalten haben, und verwenden Sie den Client, um das OTP an Ihre Telefonnummer zu senden. Zeigen Sie ein Meldungsfeld an, starten Sie den Timer, deaktivieren Sie die Schaltflächen und löschen Sie den Eintrag vollständig.
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)
Definieren Sie eine Methode, resend_otp(). Falls gesperrt, wird die entsprechende Meldung angezeigt. Andernfalls rufen Sie die Telefonnummer ab, validieren Sie sie, generieren Sie ein zufälliges OTP erneut, senden Sie das OTP erneut, zeigen Sie das Meldungsfeld an, starten Sie den Timer und deaktivieren Sie die Schaltfläche „OTP erneut senden“.
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)
Definieren Sie eine Methode, verify_otp(). Holen Sie sich das OTP und prüfen Sie, ob der Benutzer nichts eingegeben hat. Wenn das gespeicherte OTP ist KeinerBitten Sie den Benutzer, zuerst das OTP zu generieren. Wenn das vom Benutzer eingegebene OTP mit dem gespeicherten übereinstimmt, wird die Meldung zur erfolgreichen OTP-Verifizierung angezeigt, der Timer gestoppt und das Programm beendet. Andernfalls prüfen Sie, ob Fehlversuche stattgefunden haben. Bei mehr als drei Fehlversuchen sperren Sie das 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.')
Definieren Sie eine Methode, Account sperren(). Setzen Sie den Sperrstatus auf „True“ und zeigen Sie die Bezeichnung als an Konto gesperrt. Deaktivieren Sie alle Beschriftungen, Einträge und Schaltflächen. Stoppen Sie den vorhandenen Timer und starten Sie einen neuen für zehn Minuten.
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)
Definieren Sie eine Methode start_countdown(). Wenn die verbleibende Zeit kleiner oder gleich Null ist, setzen Sie das Konto zurück. Andernfalls zeigen Sie an, dass das Programm das Konto gesperrt hat, und versuchen Sie es in der verbleibenden Zeit erneut per Rückruf.
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)
Definieren Sie eine Funktion, reset_account(). Setzen Sie den Status aller Widgets und Variablen wie zuvor zurück.
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
Erstellen Sie das Root-Fenster, eine Instanz der Klasse, und führen Sie die Tkinter-Anwendung aus.
if __name__ == '__main__':
root = tk.Tk()
otp_verification = OTPVerification(root)
root.mainloop()
Beispielausgabe einer Verifizierung mittels OTP
Wenn Sie das OTP-Verifizierungsprogramm ausführen, werden Sie in einem Fenster aufgefordert, Ihre Mobiltelefonnummer einzugeben. Geben Sie es zusammen mit Ihrer Landesvorwahl ein und klicken Sie auf OTP senden Taste. Sie erhalten eine Meldung, dass das Programm das OTP erfolgreich gesendet hat und die Schaltfläche wird für zwei Minuten deaktiviert. Überprüfen Sie Ihr Telefon auf OTP und geben Sie es ein, bevor es abläuft.
Wenn Sie vor Ablauf des Timers das richtige OTP eingeben, erhalten Sie eine Meldung, dass das Programm das OTP erfolgreich überprüft hat, und das Programm wird beendet. Falls Sie es nicht rechtzeitig eingegeben haben, erhalten Sie eine Meldung, dass das OTP abgelaufen ist. Sie können auf klicken OTP erneut senden Klicken Sie auf die Schaltfläche, um ein neues OTP zu erstellen und an Ihr Telefon zu senden.
Wenn Sie das falsche OTP eingeben, zeigt das Programm eine Meldung mit der Meldung an OTP stimmt nicht überein.
Wenn Sie dreimal das falsche OTP eingeben, werden alle Felder deaktiviert und das Konto wird für zehn Minuten gesperrt.
Verwenden von Twilio mit Python
Mit Twilio können Sie ein SMS-Benachrichtigungssystem für verschiedene Ereignisse erstellen. Sie können es mit IoT-Geräten verwenden, um SMS auszulösen, wenn etwas einen bestimmten Schwellenwert über- oder unterschreitet oder wenn Sie einen Eindringling erkennen. Sie können sichere Anmeldesysteme mit Zwei-Faktor-Authentifizierung, einen WhatsApp-Chatbot und ein Terminerinnerungssystem erstellen.
Darüber hinaus können Sie es zur Telefonnummernüberprüfung, für Marketingkampagnen, zum Versenden von Umfragen und zum Sammeln von Feedback verwenden. Berücksichtigen Sie beim Erstellen einer Anwendung stets die Preise für die Twilio-API, um unerwartete Kosten zu vermeiden.