इस गाइड की मदद से अपने पायथन एप्लिकेशन में ओटीपी सत्यापन प्रणाली चालू करें।

भले ही आपका पासवर्ड चोरी हो जाए, ओटीपी सत्यापन प्रणाली सुरक्षा के लिए एक महत्वपूर्ण कारक के रूप में काम करती है। यह पासवर्ड याद रखने की आवश्यकता को समाप्त करता है, सुरक्षा की एक अतिरिक्त परत के रूप में कार्य करता है, और फ़िशिंग के जोखिमों को कम करता है।

पायथन का उपयोग करके एक ओटीपी सत्यापन प्रणाली बनाना सीखें जो आपको आपके मोबाइल नंबर पर एक ओटीपी भेजता है केवल दो मिनट के लिए वैध है और यदि आप तीन बार गलत ओटीपी दर्ज करते हैं तो आपका खाता लॉक हो जाता है पंक्ति।

टिंकर, ट्विलियो और रैंडम मॉड्यूल स्थापित करें

टिंकर आपको इसकी अनुमति देता है डेस्कटॉप एप्लिकेशन बनाएं. यह बटन, लेबल और टेक्स्ट बॉक्स जैसे विभिन्न प्रकार के विजेट प्रदान करता है जो एप्लिकेशन विकसित करना आसान बनाता है।

ट्विलियो मॉड्यूल आपकी मदद करता है एसएमएस जैसी संचार कार्यक्षमताओं को एकीकृत करें, एमएमएस, फोन कॉल और सत्यापन सीधे आपके आवेदन में। इसमें क्लाउड-आधारित बुनियादी ढांचे के साथ-साथ नंबर प्रावधान, संदेश टेम्पलेट और कॉल रिकॉर्डिंग जैसी अद्भुत सुविधाएं हैं।

ट्विलियो और टिंकर मॉड्यूल स्थापित करने के लिए, टर्मिनल में निम्नलिखित कमांड चलाएँ:

pip install twilio tk

रैंडम मॉड्यूल एक अंतर्निहित पायथन मॉड्यूल है जिसका उपयोग छद्म-यादृच्छिक संख्याएँ उत्पन्न करने के लिए किया जाता है। इसके साथ, आप यादृच्छिक संख्याएँ उत्पन्न कर सकते हैं, किसी सूची से यादृच्छिक तत्व चुन सकते हैं, सूची की सामग्री में फेरबदल कर सकते हैं, और बहुत कुछ कर सकते हैं। आप इसका उपयोग डाई रोल सिमुलेशन, सूची शफलर, या बनाने के लिए कर सकते हैं यादृच्छिक पासवर्ड जनरेटर.

ट्विलियो एपीआई जेनरेट करें और एक फ़ोन नंबर प्राप्त करें

ट्विलियो का उपयोग करने और अपने मोबाइल फोन पर ओटीपी अनुरोध भेजने के लिए, आपको ट्विलियो फोन नंबर के साथ प्रमाणीकरण क्रेडेंशियल की आवश्यकता होती है। इसे पाने के लिये:

  1. ट्विलियो खाते के लिए साइन अप करें और जाएँ ट्विलियो कंसोल.
  2. नीचे स्क्रॉल करें और पर क्लिक करें फ़ोन नंबर प्राप्त करें बटन। जनरेट किया गया फ़ोन नंबर कॉपी करें.
  3. नीचे स्क्रॉल करें खाते की जानकारी अनुभाग। कॉपी करें खाता एसआईडी और यह प्रामाणिक टोकन.

एप्लिकेशन की संरचना का निर्माण

आप इसमें पायथन का उपयोग करके ओटीपी सत्यापन प्रणाली बनाने के लिए संपूर्ण स्रोत कोड पा सकते हैं गिटहब रिपॉजिटरी.

आवश्यक मॉड्यूल आयात करें और प्रमाणीकरण क्रेडेंशियल सेट करें। प्रमाणित करने और एपीआई कॉल के लिए प्रवेश बिंदु बनने के लिए ट्विलियो क्लाइंट को प्रारंभ करें। समाप्ति समय को दो मिनट पर सेट करें।

एक वर्ग परिभाषित करें, ओटीपीसत्यापन, और रूट विंडो को इनिशियलाइज़ करने और एप्लिकेशन के शीर्षक और आयामों को सेट करने के साथ-साथ वेरिएबल्स के डिफ़ॉल्ट मान सेट करने के लिए कंस्ट्रक्टर को इनिशियलाइज़ करें।

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

मोबाइल नंबर और ओटीपी मांगने के लिए और प्रोग्राम द्वारा ओटीपी भेजने के बाद टाइमर प्रदर्शित करने के लिए तीन लेबल परिभाषित करें। मूल तत्व, उसे प्रदर्शित होने वाला टेक्स्ट और उसमें मौजूद फ़ॉन्ट शैलियाँ सेट करें। इसी तरह, उपयोगकर्ता से इनपुट प्राप्त करने के लिए दो एंट्री विजेट बनाएं। इसका मूल तत्व, इसकी चौड़ाई और इसकी फ़ॉन्ट शैलियाँ सेट करें।

ओटीपी भेजने, ओटीपी दोबारा भेजने और ओटीपी सत्यापित करने के लिए तीन बटन बनाएं। इसके मूल तत्व, इसे प्रदर्शित होने वाले टेक्स्ट, क्लिक करने पर इसे निष्पादित होने वाले कमांड और इसकी फ़ॉन्ट शैलियों को सेट करें। का उपयोग करके इन तत्वों को व्यवस्थित करें सामान बाँधना तरीका।

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

एप्लिकेशन की कार्यक्षमता का निर्माण

एक विधि परिभाषित करें, प्रारंभ_टाइमर() वह चलता है टाइमर_काउंटडाउन एक अलग धागे में.

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

एक विधि परिभाषित करें, टाइमर_काउंटडाउन(). शुरुआती समय रिकॉर्ड करें और एक अनंत लूप चलाएं जो वर्तमान समय लेता है और बीते और शेष समय की गणना करता है। अगर stop_timer सत्य है, लूप समाप्त करें। यदि शेष समय शून्य से कम या उसके बराबर है, तो एक त्रुटि संदेश बॉक्स प्रदर्शित करें जिसमें कहा गया हो कि ओटीपी समाप्त हो गया है।

पुनः भेजें ओटीपी बटन को सक्रिय करें, ओटीपी को कोई नहीं पर सेट करें और समाप्त करें। अन्यथा, शेष मिनटों और सेकंड की गणना करें, इसे टाइमर लेबल पर प्रदर्शित करें, और एक सेकंड के लिए सो जाएं।

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)

एक विधि परिभाषित करें, OTP भेजें(). अगर बंद सत्य है, उचित संदेश प्रदर्शित करें। अन्यथा, फ़ोन नंबर निकालें, उसे सत्यापित करें, और एक यादृच्छिक ओटीपी उत्पन्न करें। आपको जो मोबाइल फ़ोन पहले मिला था उसे पास करें और क्लाइंट का उपयोग करके अपने फ़ोन नंबर पर ओटीपी भेजें। एक संदेश बॉक्स प्रदर्शित करें, टाइमर प्रारंभ करें, बटन अक्षम करें, और प्रविष्टि को पूरी तरह से साफ़ करें।

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)

एक विधि परिभाषित करें, ओटीपी पुनः भेजें(). यदि लॉक है तो उचित संदेश प्रदर्शित करें। अन्यथा, फ़ोन नंबर प्राप्त करें, उसे सत्यापित करें, एक यादृच्छिक ओटीपी पुन: उत्पन्न करें, ओटीपी पुनः भेजें, संदेश बॉक्स प्रदर्शित करें, टाइमर प्रारंभ करें, और पुनः भेजें ओटीपी बटन अक्षम करें।

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)

एक विधि परिभाषित करें, सत्यापित_ओटीपी(). ओटीपी प्राप्त करें, और जांचें कि उपयोगकर्ता ने कुछ भी दर्ज नहीं किया है या नहीं। यदि संग्रहीत OTP है कोई नहीं, उपयोगकर्ता से पहले ओटीपी जनरेट करने के लिए कहें। यदि उपयोगकर्ता द्वारा दर्ज किया गया ओटीपी संग्रहीत ओटीपी से मेल खाता है, तो सफल ओटीपी सत्यापन संदेश प्रदर्शित करें, टाइमर बंद करें और प्रोग्राम से बाहर निकलें। अन्यथा, गलत प्रयासों की जाँच करें। यदि गलत प्रयास तीन से अधिक हों तो खाता लॉक कर दें।

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

एक विधि परिभाषित करें, लॉक_अकाउंट(). लॉक की गई स्थिति को सत्य पर सेट करें और लेबल को इस रूप में प्रदर्शित करें खाता बंद. सभी लेबल, प्रविष्टियाँ और बटन अक्षम करें। मौजूदा टाइमर बंद करें और दस मिनट के लिए नया टाइमर शुरू करें।

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)

एक विधि परिभाषित करें प्रारंभ_गिनती(). यदि शेष समय शून्य से कम या उसके बराबर है, तो खाता रीसेट करें। अन्यथा, प्रदर्शित करें कि प्रोग्राम ने खाता लॉक कर दिया है और शेष समय में कॉलबैक का उपयोग करके पुनः प्रयास करें।

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)

एक फ़ंक्शन परिभाषित करें, रीसेट_अकाउंट(). सभी विजेट्स और वेरिएबल्स की स्थिति को पहले की तरह रीसेट करें।

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

रूट विंडो, क्लास का एक उदाहरण बनाएं और टिंकर एप्लिकेशन चलाएं।

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

ओटीपी का उपयोग करके सत्यापन का उदाहरण आउटपुट

ओटीपी सत्यापन कार्यक्रम चलाने पर, आपको एक विंडो मिलती है जो आपसे अपना मोबाइल नंबर दर्ज करने के लिए कहती है। इसे अपने देश कोड के साथ दर्ज करें और दबाएं OTP भेजें बटन। आपको एक संदेश मिलता है कि प्रोग्राम ने ओटीपी सफलतापूर्वक भेज दिया है और बटन दो मिनट के लिए निष्क्रिय हो जाता है। ओटीपी के लिए अपने फोन की जांच करें और उसके समाप्त होने से पहले उसे दर्ज करें।

टाइमर खत्म होने से पहले सही ओटीपी दर्ज करने पर, आपको एक संदेश मिलता है कि प्रोग्राम ने ओटीपी को सफलतापूर्वक सत्यापित कर लिया है, और प्रोग्राम बाहर निकल जाता है। यदि आपने इसे समय पर दर्ज नहीं किया है, तो आपको एक संदेश बॉक्स मिलेगा जिसमें कहा जाएगा कि ओटीपी समाप्त हो गया है। आप पर क्लिक कर सकते हैं ओटीपी पुनः भेजें एक नया ओटीपी जनरेट करने और इसे अपने फोन पर भेजने के लिए बटन।

यदि आप गलत ओटीपी दर्ज करते हैं, तो प्रोग्राम एक संदेश बॉक्स प्रदर्शित करता है ओटीपी मेल नहीं खाता.

यदि आप तीन बार गलत ओटीपी दर्ज करते हैं, तो सभी फ़ील्ड अक्षम हो जाते हैं और खाता दस मिनट के लिए लॉक हो जाता है।

पायथन के साथ ट्विलियो का उपयोग करना

ट्विलियो का उपयोग करके, आप विभिन्न घटनाओं के लिए एक एसएमएस अधिसूचना प्रणाली बना सकते हैं। जब कोई चीज़ एक निश्चित सीमा से ऊपर या नीचे गिरती है या जब आप किसी घुसपैठिए का पता लगाते हैं तो एसएमएस ट्रिगर करने के लिए आप इसका उपयोग IoT उपकरणों के साथ कर सकते हैं। आप दो-कारक प्रमाणीकरण के साथ सुरक्षित लॉगिन सिस्टम बना सकते हैं, एक व्हाट्सएप चैटबॉट और एक अपॉइंटमेंट रिमाइंडर सिस्टम बना सकते हैं।

इसके अलावा, आप इसका उपयोग फ़ोन नंबर सत्यापन, मार्केटिंग अभियान, सर्वेक्षण भेजने और फीडबैक एकत्र करने के लिए कर सकते हैं। किसी भी एप्लिकेशन का निर्माण करते समय, अप्रत्याशित लागतों से बचने के लिए ट्विलियो एपीआई मूल्य निर्धारण का हमेशा ध्यान रखें।