احصل على نظام التحقق من OTP وتشغيله في تطبيق Python الخاص بك بمساعدة هذا الدليل.

حتى في حالة سرقة كلمة المرور الخاصة بك ، فإن أنظمة التحقق من OTP تعمل كعامل حاسم للأمان. إنه يلغي الحاجة إلى تذكر كلمات المرور ، ويعمل كطبقة إضافية من الأمان ، ويقلل من مخاطر التصيد الاحتيالي.

تعلم كيفية إنشاء نظام تحقق OTP باستخدام Python الذي يرسل لك OTP إلى رقم هاتفك المحمول ، هو صالح لمدة دقيقتين فقط ويتم قفل حسابك إذا قمت بإدخال كلمة المرور لمرة واحدة بشكل خاطئ ثلاث مرات في ملف صف.

قم بتثبيت Tkinter و Twilio و Random Modules

Tkinter يسمح لك ب إنشاء تطبيقات سطح المكتب. يوفر مجموعة متنوعة من الأدوات مثل الأزرار والتسميات ومربعات النص التي تسهل تطوير التطبيقات.

وحدة Twilio تساعدك على دمج وظائف الاتصال مثل الرسائل القصيرة، ورسائل الوسائط المتعددة ، والمكالمات الهاتفية ، والتحقق مباشرة في التطبيق الخاص بك. يحتوي على بنية تحتية قائمة على السحابة إلى جانب ميزات مذهلة مثل توفير الأرقام وقوالب الرسائل وتسجيل المكالمات.

لتثبيت وحدتي Twilio و Tkinter ، قم بتشغيل الأمر التالي في الجهاز:

pip install twilio tk

الوحدة النمطية Random هي وحدة Python مضمنة تستخدم لتوليد أرقام عشوائية زائفة. باستخدام هذا ، يمكنك إنشاء أرقام عشوائية واختيار عناصر عشوائية من قائمة وتبديل محتويات القائمة عشوائيًا والمزيد. يمكنك استخدامه لبناء محاكاة لفة القالب ، أو قائمة خلط ورق اللعب ، أو ملف

instagram viewer
مولد كلمة السر العشوائية.

قم بإنشاء Twilio API واحصل على رقم هاتف

لاستخدام Twilio وإرسال طلبات OTP إلى هاتفك المحمول ، فأنت تحتاج إلى بيانات اعتماد المصادقة إلى جانب رقم هاتف Twilio. لتحقيق هذا:

  1. قم بالتسجيل للحصول على حساب Twilio وقم بزيارة وحدة التحكم Twilio.
  2. قم بالتمرير لأسفل وانقر فوق احصل على رقم الهاتف زر. انسخ رقم الهاتف الذي تم إنشاؤه.
  3. قم بالتمرير لأسفل إلى ملف معلومات الحساب قسم. انسخ ال SID الحساب و ال رمز المصادقة.

بناء هيكل التطبيق

يمكنك العثور على الكود المصدري بالكامل لبناء نظام تحقق OTP باستخدام Python في هذا مستودع جيثب.

قم باستيراد الوحدات النمطية الضرورية وقم بتعيين بيانات اعتماد المصادقة. قم بتهيئة عميل Twilio للمصادقة ويكون نقطة الدخول لمكالمات API. اضبط وقت انتهاء الصلاحية على دقيقتين.

تحديد فئة ، التحقق من OTP ، وتهيئة المُنشئ لتعيين القيم الافتراضية للمتغيرات جنبًا إلى جنب مع تهيئة نافذة الجذر ، وتعيين عنوان التطبيق وأبعاده.

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

حدد ثلاث تسميات لطلب رقم الهاتف المحمول ، ومرة ​​واحدة ، ولعرض عداد الوقت بعد أن يرسل البرنامج كلمة المرور لمرة واحدة. عيّن العنصر الأصل ، والنص الذي يجب أن يعرضه ، وأنماط الخط التي يجب أن يمتلكها. وبالمثل ، قم بإنشاء وحدتي إدخال للحصول على مدخلات من المستخدم. قم بتعيين عنصره الأصلي وعرضه وأنماط خطه.

إنشاء ثلاثة أزرار لإرسال OTP وإعادة إرسال OTP والتحقق من OTP. عيّن العنصر الأصل ، والنص الذي يجب أن يعرضه ، والأمر الذي يجب أن ينفذه عند النقر عليه ، وأنماط الخط الخاصة به. نظم هذه العناصر باستخدام علية طريقة.

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

بناء وظائف التطبيق

تحديد طريقة ، start_timer () الذي يدير الموقت_العد التنازلي في موضوع منفصل.

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

تحديد طريقة ، timer_countdown (). سجل وقت البدء وقم بتشغيل حلقة لا نهائية تأخذ الوقت الحالي وتحسب الوقت المنقضي والوقت المتبقي. لو stop_timer صحيح ، قم بإنهاء الحلقة. إذا كان الوقت المتبقي أقل من أو يساوي الصفر ، فقم بعرض مربع رسالة خطأ تفيد بأن كلمة المرور لمرة واحدة منتهية الصلاحية.

قم بتنشيط زر إعادة إرسال OTP ، واضبط OTP على لا شيء ، وقم بإنهاء. خلاف ذلك ، احسب الدقائق والثواني المتبقية ، واعرضها على ملصق المؤقت ، ثم ضع السكون لمدة ثانية واحدة.

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)

تحديد طريقة ، send_otp (). لو مقفل هو صحيح ، اعرض الرسالة المناسبة. خلافًا لذلك ، قم باستخراج رقم الهاتف والتحقق من صحته وإنشاء كلمة مرور OTP عشوائية. مرر الهاتف المحمول الذي حصلت عليه سابقًا واستخدم العميل لإرسال 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)

تحديد طريقة ، resend_otp (). إذا تم قفله ، اعرض الرسالة المناسبة. بخلاف ذلك ، احصل على رقم الهاتف ، وتحقق من صحته ، وأعد إنشاء OTP عشوائيًا ، وأعد إرسال OTP ، واعرض مربع الرسالة ، وابدأ الموقت ، وقم بتعطيل زر إعادة إرسال OTP.

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)

تحديد طريقة ، check_otp (). احصل على OTP ، وتحقق مما إذا كان المستخدم لم يدخل أي شيء. إذا تم تخزين OTP لا أحد، اطلب من المستخدم إنشاء OTP أولاً. إذا كان رمز OTP الذي أدخله المستخدم يطابق الرقم المخزن ، اعرض رسالة التحقق من 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

قم بإنشاء نافذة الجذر ، مثيل للفئة ، وقم بتشغيل تطبيق Tkinter.

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

مثال لإخراج التحقق باستخدام OTP

عند تشغيل برنامج التحقق من OTP ، تظهر لك نافذة تطلب منك إدخال رقم هاتفك المحمول. أدخله مع رمز بلدك واضغط على أرسل OTP زر. تتلقى رسالة تفيد بأن البرنامج قد أرسل كلمة المرور لمرة واحدة بنجاح ويتم إلغاء تنشيط الزر لمدة دقيقتين. تحقق من هاتفك لمرة واحدة وأدخلها قبل انتهاء صلاحيتها.

عند إدخال كلمة المرور لمرة واحدة (OTP) الصحيحة قبل نفاد الوقت ، ستصلك رسالة تفيد بأن البرنامج قد تحقق من كلمة المرور لمرة واحدة بنجاح ، وأن البرنامج يخرج. في حالة عدم إدخاله في الوقت المحدد ، ستصلك رسالة تفيد بأن كلمة المرور لمرة واحدة قد انتهت صلاحيتها. يمكنك النقر فوق إعادة إرسال OTP زر لإنشاء OTP جديد وإرساله إلى هاتفك.

إذا أدخلت كلمة المرور لمرة واحدة بشكل خاطئ ، فسيعرض البرنامج مربع رسالة يقول OTP لا يتطابق.

إذا أدخلت كلمة المرور لمرة واحدة بشكل خاطئ ثلاث مرات ، فسيتم تعطيل جميع الحقول ويتم قفل الحساب لمدة عشر دقائق.

استخدام تويليو مع بايثون

باستخدام Twilio ، يمكنك إنشاء نظام إشعار SMS لمختلف الأحداث. يمكنك استخدامه مع أجهزة إنترنت الأشياء لتشغيل الرسائل القصيرة عندما يسقط شيء ما أعلى أو أقل من عتبة معينة أو عندما تكتشف دخيلًا. يمكنك إنشاء أنظمة تسجيل دخول آمنة باستخدام مصادقة ثنائية ، وإنشاء روبوت دردشة WhatsApp ، ونظام تذكير بالمواعيد.

بصرف النظر عن هذا ، يمكنك استخدامه للتحقق من رقم الهاتف ، والحملات التسويقية ، وإرسال الاستطلاعات ، وجمع التعليقات. أثناء إنشاء أي تطبيق ، كن دائمًا على دراية بتسعير Twilio API لتجنب التكاليف غير المتوقعة.