Bu kılavuzun yardımıyla Python uygulamanızda OTP doğrulama sistemini çalışır duruma getirin.

Parolanız çalınsa bile, OTP doğrulama sistemleri güvenlik için çok önemli bir faktör olarak hizmet eder. Parolaları hatırlama ihtiyacını ortadan kaldırır, ekstra bir güvenlik katmanı görevi görür ve kimlik avı risklerini azaltır.

Cep numaranıza bir OTP gönderen Python kullanarak bir OTP doğrulama sistemi oluşturmayı öğrenin. sadece iki dakika için geçerlidir ve bir seferde üç kez yanlış OTP girerseniz hesabınız kilitlenir. sıra.

Tkinter, Twilio ve Random Modüllerini Kurun

Tkinter size izin verir masaüstü uygulamaları oluştur. Uygulama geliştirmeyi kolaylaştıran düğmeler, etiketler ve metin kutuları gibi çeşitli widget'lar sunar.

Twilio modülü size yardımcı olur SMS gibi iletişim işlevlerini entegre edin, MMS, telefon görüşmeleri ve doğrulama doğrudan uygulamanızda. Numara sağlama, mesaj şablonları ve arama kaydı gibi harika özelliklerin yanı sıra bulut tabanlı bir altyapıya sahiptir.

Twilio ve Tkinter modüllerini kurmak için terminalde aşağıdaki komutu çalıştırın:

instagram viewer
pip install twilio tk

Random modülü, sözde rasgele sayılar oluşturmak için kullanılan yerleşik bir Python modülüdür. Bununla rastgele sayılar oluşturabilir, bir listeden rastgele öğeler seçebilir, bir listenin içeriğini karıştırabilir ve daha fazlasını yapabilirsiniz. Bir kalıp rulosu simülasyonu, bir liste karıştırıcı veya bir rastgele şifre üreticisi.

Twilio API'sini Oluşturun ve Bir Telefon Numarası Alın

Twilio'yu kullanmak ve cep telefonunuza OTP istekleri göndermek için, bir Twilio telefon numarasıyla birlikte kimlik doğrulama bilgilerine ihtiyacınız vardır. Bunu başarmak için:

  1. Bir Twilio hesabı için kaydolun ve şu adresi ziyaret edin: Twilio konsolu.
  2. Aşağı kaydırın ve tıklayın telefon numarası al düğme. Oluşturulan telefon numarasını kopyalayın.
  3. aşağı kaydır Hesap bilgisi bölüm. Kopyala Hesap SID'si ve Kimlik Doğrulama Jetonu.

Uygulamanın Yapısını Oluşturma

Python kullanarak bir OTP Doğrulama Sistemi oluşturmak için kaynak kodunun tamamını burada bulabilirsiniz. GitHub deposu.

Gerekli modülleri içe aktarın ve kimlik doğrulama bilgilerini ayarlayın. Kimlik doğrulaması yapmak ve API çağrıları için giriş noktası olmak için Twilio istemcisini başlatın. Son kullanma süresini iki dakikaya ayarlayın.

Bir sınıf tanımlayın, OTPDoğrulama, ve kök pencereyi başlatmanın yanı sıra uygulamanın başlığını ve boyutlarını ayarlamanın yanı sıra değişkenlerin varsayılan değerlerini ayarlamak için yapıcıyı başlatın.

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

Bir cep telefonu numarası ve bir OTP istemek ve program bir OTP gönderdikten sonra bir zamanlayıcı görüntülemek için üç etiket tanımlayın. Üst öğeyi, görüntülemesi gereken metni ve sahip olması gereken yazı tipi stillerini ayarlayın. Benzer şekilde, kullanıcıdan girdi almak için iki giriş widget'ı oluşturun. Üst öğesini, genişliğini ve yazı tipi stillerini ayarlayın.

OTP göndermek, OTP'yi yeniden göndermek ve OTP'yi Doğrulamak için üç düğme oluşturun. Üst öğesini, görüntülemesi gereken metni, tıklandığında yürütmesi gereken komutu ve yazı tipi stillerini ayarlayın. kullanarak bu öğeleri düzenleyin. ambalaj yöntem.

 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()

Uygulamanın İşlevselliğini Oluşturma

Bir yöntem tanımlayın, start_timer() bu çalışır zamanlayıcı_geri sayım ayrı bir iş parçacığında.

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

Bir yöntem tanımlayın, zamanlayıcı_geri sayım(). Başlangıç ​​zamanını kaydedin ve şimdiki zamanı alan ve geçen ve kalan zamanı hesaplayan sonsuz bir döngü çalıştırın. Eğer stop_timer true ise döngüyü sonlandırın. Kalan süre sıfırdan küçük veya sıfıra eşitse, OTP'nin süresinin dolduğunu belirten bir hata mesajı kutusu görüntüleyin.

OTP'yi yeniden gönder düğmesini etkinleştirin, OTP'yi yok olarak ayarlayın ve sonlandırın. Aksi takdirde, kalan dakika ve saniyeleri hesaplayın, zamanlayıcı etiketinde görüntüleyin ve bir saniye uyuyun.

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)

Bir yöntem tanımlayın, gönder_otp(). Eğer kilitli doğruysa, uygun mesajı görüntüleyin. Aksi takdirde, telefon numarasını çıkarın, doğrulayın ve rastgele bir OTP oluşturun. Daha önce aldığınız cep telefonunu verin ve OTP'yi telefon numaranıza göndermek için istemciyi kullanın. Bir mesaj kutusu görüntüleyin, zamanlayıcıyı başlatın, düğmeleri devre dışı bırakın ve girişi tamamen silin.

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)

Bir yöntem tanımlayın, yeniden_otp(). Kilitliyse uygun mesajı görüntüleyin. Aksi takdirde, telefon numarasını alın, doğrulayın, rastgele bir OTP oluşturun, OTP'yi yeniden gönderin, mesaj kutusunu görüntüleyin, zamanlayıcıyı başlatın ve OTP'yi yeniden gönder düğmesini devre dışı bırakın.

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)

Bir yöntem tanımlayın, doğrulama_otp(). OTP'yi alın ve kullanıcının herhangi bir şey girip girmediğini kontrol edin. Depolanan OTP ise Hiçbiri, kullanıcıdan önce OTP'yi oluşturmasını isteyin. Kullanıcının girdiği OTP kayıtlı olanla eşleşirse, başarılı OTP doğrulama mesajını görüntüleyin, zamanlayıcıyı durdurun ve programdan çıkın. Aksi takdirde, yanlış denemeleri kontrol edin. Yanlış deneme sayısı üçü geçerse hesabı kilitleyin.

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.')

Bir yöntem tanımlayın, kilitli hesap(). Kilitli durumunu true olarak ayarlayın ve etiketi şu şekilde görüntüleyin: Hesap Kilitli. Tüm etiketleri, girişleri ve düğmeleri devre dışı bırakın. Mevcut zamanlayıcıyı durdurun ve on dakikalığına yenisini başlatın.

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)

Bir yöntem tanımlayın start_countdown(). Kalan süre sıfırdan küçük veya sıfıra eşitse, hesabı sıfırlayın. Aksi takdirde, programın hesabı kilitlediğini görüntüleyin ve kalan süre içinde bir geri arama kullanarak tekrar deneyin.

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)

Bir işlev tanımlayın, reset_account(). Tüm widget'ların ve değişkenlerin durumunu eskisi gibi sıfırlayın.

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

Sınıfın bir örneği olan kök pencereyi oluşturun ve Tkinter uygulamasını çalıştırın.

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

OTP Kullanarak Doğrulamanın Örnek Çıktısı

OTP Doğrulama programını çalıştırırken, cep telefonu numaranızı girmenizi isteyen bir pencere görürsünüz. Ülke kodunuzla birlikte girin ve OTP gönder düğme. Programın OTP'yi başarıyla gönderdiğine dair bir mesaj alırsınız ve düğme iki dakikalığına devre dışı kalır. Telefonunuzda OTP olup olmadığını kontrol edin ve süresi dolmadan önce girin.

Zamanlayıcı dolmadan önce doğru OTP'yi girdiğinizde, programın OTP'yi başarıyla doğruladığını belirten bir mesaj alırsınız ve programdan çıkar. Zamanında girmediyseniz, OTP'nin süresinin dolduğunu belirten bir mesaj kutusu alacaksınız. üzerine tıklayabilirsiniz OTP'yi yeniden gönder Yeni bir OTP oluşturmak ve telefonunuza göndermek için düğmesine basın.

Yanlış OTP'yi girerseniz, program şunu söyleyen bir mesaj kutusu görüntüler: OTP eşleşmiyor.

Üç kez yanlış OTP girerseniz, tüm alanlar devre dışı kalır ve hesap on dakika süreyle kilitlenir.

Twilio'yu Python ile Kullanmak

Twilio'yu kullanarak çeşitli etkinlikler için bir SMS bildirim sistemi oluşturabilirsiniz. Bir şey belirli bir eşiğin üstüne veya altına düştüğünde veya bir davetsiz misafir tespit ettiğinizde SMS'i tetiklemek için IoT cihazlarıyla kullanabilirsiniz. İki faktörlü kimlik doğrulama ile güvenli oturum açma sistemleri, WhatsApp chatbot ve randevu hatırlatma sistemi oluşturabilirsiniz.

Bunun dışında telefon numarası doğrulama, pazarlama kampanyaları, anket gönderme ve geri bildirim toplama için kullanabilirsiniz. Herhangi bir uygulama oluştururken beklenmedik maliyetlerden kaçınmak için her zaman Twilio API fiyatlandırmasına dikkat edin.