复制
def start_timer(self):
self.timer_thread = threading.Thread(target=self.timer_countdown)
self.timer_thread.start()
定义一个方法timer_countdown() 。记录开始时间,并运行一个无限循环,该循环获取当前时间并计算已流逝的时间和剩余时间 。如果stop_timer为true,终止循环 。如果剩余时间小于或等于0,显示错误消息框 , 表明OTP已过期 。
激活重新发送OTP按钮,将OTP设置为none,并终止 。否则,计算剩余的分钟和秒,将其显示在计时器标签上 , 并休眠一秒钟 。
复制
def timer_countdown(self):
start_time = time.time()
while True:
current_time = time.time()
elapsed_time = current_time - start_time
【如何使用Python构建OTP验证系统?】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)
定义一个方法send_otp() 。如果locked为true,显示相应的消息 。否则提取并验证电话号码,生成一个随机的OTP 。提供之前获取的手机号码,使用客户软件将OTP发送到您的电话号码 。显示消息框,启动计时器 , 禁用按钮,并完全清除输入内容 。
复制
def send_otp(self):
if self.locked:
messagebox.showinfo('Account Locked', 'Your account is locked. Try again later.')
return
mobile_number = self.mobile_number_entry.get()
if not 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)
复制
def send_otp(self):
if self.locked:
messagebox.showinfo('Account Locked', 'Your account is locked. Try again later.')
return
mobile_number = self.mobile_number_entry.get()
if not 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)
定义一个方法resend_otp() 。如果锁住,显示相应的消息 。否则获取并验证电话号码,重新生成随机的OTP,重新发送OTP,显示消息框,启动计时器,并禁用重新发送OTP按钮 。
复制
def resend_otp(self):
if self.locked:
messagebox.showinfo('Account Locked', 'Your account is locked. Try
again later.')
return
mobile_number = self.mobile_number_entry.get()
if not 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)
定义一个方法verify_otp() 。获取OTP,并检查用户是否没有输入任何内容 。如果存储的OTP为None,要求用户先生成OTP 。如果用户输入的OTP与存储的OTP匹配,显示OTP验证成功,停止计时器 , 并退出程序 。否则检查错误的输入尝试 。如果输错次数超过3次,锁住账户 。
复制
def verify_otp(self):
user_otp = self.otp_entry.get()
if not user_otp:
messagebox.showerror('Error', 'Please enter OTP.')
return
if self.otp is None:
messagebox.showerror('Error', 'Please generate OTP first.')
return
if int(user_otp) == self.otp:
推荐阅读
- 五小步快速集成使用sentinel限流
- 使用Diagrams画架构图,你会吗?
- Python构建高效安全的OTP验证系统!
- 踩电动缝纫机教程视频 踩电动缝纫机的正确使用方法
- 千分表的使用方法及读数步骤视频 千分表的使用方法
- 束腰清洗方法 束腰带如何清洗
- 微信群怎么使用拍一拍 微信群怎么使用拍一拍功能设置
- 短视频该如何变现盈利 短视频变现的正确方法
- 翁帆被疑“间谍”,真相来了!杨振宁束手无策管不了,如何收场?
- 微信如何拉黑别人 微信如何拉黑别人教程
