مشكلة في تسجيل دخول المستخدم
السلام عليكم ورحمة الله وبركاته، إخوانِ الكرام أنا أواجه مشكلة في SQlite3
حالياً أعمل على تطبيق Desktop, لتحميل الفيديوهات والموسيقى من اليوتيوب، واجهتني مشكلة في تسجيل الدخول من (المُستخدم)، قمت بعمل واجهة تسجيل حساب جديد للمُستخدم وقمت بحفظ البيانات في قاعدة البيانات في جدول إسمه (User) البيانات التي تَّلقيتها من المُستخدم هي كالآتي:
User Name , Email , Password , confirm Password
هذه البيانات تَّلقيتها في تسجيل حساب جديد وقمت بحفظها وكل الأمور جيدة لا يوجد أيّ مشكلة في واجهة التسجيل هذه، نأتي إلى المشكلة التي واجهتني
والمشكلة تحديدًا في واجهة تسجيل الدخول.
يعني منطقيًا عندما يقوم المستخدم بإنشاء حساب جديد بالتأكيد سيحتاج إلى تسجيل الدخول في حسابه الذي إنشأهُ، أنا لدّي مُستخدمين إثنين طبعاً أنا قمت بإضافتهم فقط للتجربة لا أكثر، عمومًا، لدي مُستخدمين إثنين:
المُستخدم الأول لديه إيميل بهذا العنوان alaa-jasim@gmail.com
و كلمة مرور 12345678
ولدّي المُستخدم الثاني : لديه إيميل بهذا العنوان raad-ahmed@gmail.com
و كلمة مرور 12345678
ربما لاحظتم أن المُستخدمين لديهم كلمة سر موحدة؟
نعم وأنا اخترت ذلك حتى أُبين لكم المشكلة. الآن فالنفرض إنه المُستخدم صاحب إيميل alaa قام بتسجيل الدخول بواسطة بيانته التي قام بتسجيلها.
المشكلة عندما يتلقى بيانته وأقوم بتخزينهن في متغيرات بهذا الشكل:
self.email = self.email_sign
self.password = self.password_sign
عندما أقوم بفتح قاعدة البيانات بهذا الشكل:
(curs.execute(select Email , password from User
أنا قمت بالإستعلام بهذا الشكل لأنني أريد الوصول فقط إلى الإيميل وكلمة المرور، لا أريد الوصول إلى إسم المستخدم.
لاحظوا: عندما أقوم بطباعة البيانات بإستخدام التعليمة ()curs.fetchall
سأحصل على جميع الإيميلات وكلمات المرور بداخل Tuple
يعني بهذا الشكل
(alaa-jasim@gmail.com , 12345678)
(raad-ahmed@gmail.com , 12345678)
نأتي على التفصيلة الأخيرة.
فالنفرض أن المُستخدم صاحب الإيميل alaa-jasim@gmail.com
قام بالتسجيل مع الإشارة إلى أن كلمة المرور لهذا المستخدم هي: 12345678
عندما أقوم بإنشاء for loop وأقوم بالمرور على البيانات وأبدأ في التحقق يعني هكذا فالنفرض إنه هذا المستخدم قام بإدخال كلمة مرور خاطئة بهذا الشكل
12344
:()for row in curs.fetchall
[0]if self.password in row
الآن عندما أبدأ في التحقق من كلمة السر هذه 12344
فعند التنفيذ سيقول لي بأنها موجودة !! لماذا لأنه مباشرةً ذهب إلى المُستخدم raad
وقام بالتحقق إنه لديه كلمة مرور تشبه كلمة مرور alaa
ومباشرةً قام بالتسجيل الدخول ومن المفترض إنه يجب أن يقول لي إنها غير موجودة لأنه منطقيًا.
المطلوب
أنا بحاجة إلى طريقة بحيث تتحقق من كلمة المرور الخاصة بالمستخدم إذا كانت تتوافق مع الإيميل المُسجل في هذا الحالة أريد أن يسمح بالتسجيل وإذا كانت موجودة ولكن لا تتوافق مع الإيميل المُسجل بهذه الحالة لا أريد أن يسمح بالتسجيل.
لدي مشكلة ثانية و هي عندما يقوم بالمُستخدم بإضافة كلمة مرور موجودة ولكنها غير متوافقة مع الإيميل الخاص به فإنه يقول لي تسجيل صحيح وهذه مشكلة حماية سيئة جداً. فما حلها أيضاً.
أعلم لقد أطلت في الشرح جداً عليكن لكن والله سامحوني حقيقةً مشكلة جعلتني أفقد أعصابي.
أتمنى أن تفيدوني ولكم جزيل الشكر.