في ASP.NET 2.0، يمكن لوظيفة موفر العضوية المضافة حديثًا، بالإضافة إلى سلسلة من عناصر التحكم القوية في التسجيل وتسجيل الدخول، إدارة تسجيل دخول المستخدم والأذونات بسهولة (راجع << مقدمة إلى عناصر التحكم في تسجيل الدخول إلى ASP.NET 2.0 >>).
ومع ذلك، قد تجد أن عناصر التحكم في تسجيل الدخول ووظائف إدارة العضوية التي تأتي مع ASP.NET 2.0 يتم استخدامها مع SQL Server 2005 Express بشكل افتراضي، لذا، كيفية تغييرها لاستخدام SQL Server 2000 أو مصادر البيانات الأخرى، مثل الوصول ، أوراكل ، الخ؟ إذا كنت تريد إعادة كتابة تطبيق لإدارة المستخدمين الذين قاموا بتسجيل الدخول أو أذونات المستخدم في التطبيق الخاص بك، فكيف يجب عليك تعديله؟ سنوضح في هذه المقالة كيفية استخدام موفر مخصص في ASP.NET 2.0 للتعاون مع التحكم في تسجيل الدخول لتنفيذ عملية تسجيل دخول بسيطة.
لفهم كيفية عمل الموفر في ASP.NET 2.0، انظر أولاً إلى مخطط البنية التالي:
اسم الحقل نوع البيانات حجم الحقل اسم المستخدم (المفتاح) النص 8 نص كلمة المرور 8 البريد الإلكتروني النص 50 نص سؤال كلمة المرور 50 نص الإجابة بكلمة المرور 50 |
تم تعديل الفئة العامة SqlMembershipProvider يرث SqlMembershipProvider وظيفة التجاوزات العامة إنشاء مستخدم (...) ... وظيفة النهاية ... إنهاء الفئة |
إذا كنت لا تريد استخدام SqlMembershipProvider المتوفر في Visual Studio 2005 beta 2، فأنت تحتاج فقط إلى الإعلان عن فصلك الخاص ووراثة فئة MembershipProvider. تحتوي فئة MembershipProvider على الأساليب والخصائص المتعلقة بالعضوية.
في Solution Explorer، استخدم "إضافة عنصر جديد.." لإضافة فئة، وتسميتها AccessMembershipProvider.vb، واتبع مطالبات النظام لوضعها في دليل App_Code.
بعد ذلك، قم بالإشارة إلى مساحة الاسم ذات الصلة واكتب إطار عمل البرنامج كما يلي:
Imports Microsoft.VisualBasic
واردات System.Data
Public Class AccessMembershipProvider
يرث موفر العضوية
من أجل استخدام موفر مخصص،
يجب علىEnd Class
إجراء التكوينات ذات الصلة في web.config.يمكنك إضافة ملف web.config جديد وكتابة الكود التالي:
<system.web>
<وضع المصادقة = "النماذج"/>
<عضوية
defaultProvider="AccessMembershipProvider" >
<المقدمون>
<إضافة اسم = "AccessMembershipProvider"
اكتب = "أكسيس ميمبرشيب بروفايدر"
يتطلب سؤال وجواب = "صحيح"
ConnectionString = "Provider = Microsoft.Jet.
OLEDB.4.0;مصدر البيانات=C:NewMembershipProvider
App_DataMembers.mdb;استمرار الأمان
معلومات = خطأ" />
</المقدمين>
</العضوية>
</system.web>
من بينها، يرجى الانتباه إلى النقاط التالية:
يجب تحديد طريقة المصادقة كـ "نماذج" (وضع المصادقة = "forms").
باستخدام العلامة <add>، قم بإضافة موفر مخصص يسمى AccessMembershipProvider .
تشير السمة requireQuestionAndAnswer، عندما تكون قيمتها صحيحة، إلى أنه أثناء التسجيل الجديد، يجب ملء الأسئلة والإجابات السريعة التي يجب الإجابة عليها.
ConnectionString، يشير إلى سلسلة الاتصال للاتصال بقاعدة البيانات.
تشير السمة DefaultProvider إلى الموفر الذي يستخدمه النظام بشكل افتراضي، لأنه يمكن تعيين موفري خدمات متعددين في النظام،
في AccessMembershipProvider.vb، قم بإضافة العضو الخاص التالي
connStr As String
اتصال خاص كـ OleDb.OleDbCommand جديد
خاص _يتطلب سؤال وإجابة كقيمة منطقية
خاص _minRequiredPasswordLength كعدد صحيح
وإضافة طريقة التهيئة () ، يكون الكود كما يلي
Public Overrides Sub تهيئة (ByVal name As String، ByVal config As System.Collections.Specialized.NameValueCollection)
'=== يسترد قيم السمات المعينة في
'web.config وتعيين المتغيرات المحلية===
إذا كان التكوين ("requiresQuestionAndAnswer") = "صحيح" ثم _
_requiresQuestionAndAnswer = صحيح
connStr = التكوين ("connectionString")
MyBase.Initialize (الاسم، التكوين)
End Sub عندما
يتم تحميل الموفر، سيتم استدعاء أسلوب التهيئة (). في ملف web.config الآن، يمكن قراءة قيم السمات المختلفة التي تم تعيينها باستخدام العلامة <add> بهذه الطريقة. على سبيل المثال، يمكن قراءتها باستخدام معلمة التكوين. في الكود أعلاه، يتم استخدام config("connectionString") لقراءة سلسلة اتصال قاعدة البيانات ووضعها في متغير connStr. بعد ذلك، قم بتعيين الخاصية RequiresQuestionAndAnswer كما يلي:
Public Overrides ReadOnly Property _
يتطلب سؤال وجواب () _
كما منطقية
يحصل
إذا _requiresQuestionAndAnswer = صحيح إذن
العودة صحيح
آخر
العودة كاذبة
نهاية إذا
نهاية الحصول على
خاصية النهاية
لاحظ أنه يجب تعيين قيمة هذه الخاصية، وإلا، في عنصر التحكم CreateUserWizard، لن يتم عرض مربعي النص الخاصين بسؤال المطالبة بكلمة المرور والإجابة السريعة بكلمة المرور.
بعد ذلك، يمكننا البدء في كتابة التعليمات البرمجية لإنشاء مستخدم جديد، رمز طريقة CreateUser () كما يلي:
وظيفة التجاوزات العامة CreateUser (اسم مستخدم ByVal كسلسلة، كلمة مرور ByVal كسلسلة، بريد ByVal كسلسلة، ByValpasswordQuestion كسلسلة. ، ByValpasswordAnswer كسلسلة، تمت الموافقة على ByVal كـ Boolean، ByVal ProviderUserKey ككائن، حالة ByRef كـ System.Web.Security.MembershipCreateStatus) كـ System.Web.Security.MembershipUser
Dim conn كـ OleDb.OleDbConnection جديد (connStr)
يحاول
كون.فتح ()
Dim sql As String = "INSERT INTO VALUES Membership (" & _
"@اسم المستخدم، @كلمة المرور، @البريد الإلكتروني،" & _
"@passwordQuestion، @passwordAnswer )"
Dim comm باسم OleDb.OleDbCommand(sql, conn) الجديد
comm.Parameters.AddWithValue("@username"، اسم المستخدم)
comm.Parameters.AddWithValue("@password"، كلمة المرور)
comm.Parameters.AddWithValue("@email"، البريد الإلكتروني)
comm.Parameters.AddWithValue("@passwordQuestion"،passwordQuestion)
comm.Parameters.AddWithValue("@passwordAnswer"،passwordAnswer)
نتيجة خافتة كعدد صحيح = comm.ExecuteNonQuery()
conn.Close()
= MembershipCreateStatus.Success
تعتيم المستخدم كعضوية جديدة ("AccessMembershipProvider"، اسم المستخدم، لا شيء، البريد الإلكتروني، سؤال كلمة المرور، لا شيء، صحيح، خطأ، الآن، لا شيء، لا شيء، لا شيء، لا شيء)
عودة المستخدم
قبض على السابق كاستثناء
الحالة = MembershipCreateStatus.UserRejected
العودة لا شيء
إنهاء المحاولة
وظيفة النهاية
دعنا نفسر الكود أعلاه أولاً، نقوم بإدراج سجل في قاعدة البيانات بعد إضافة المستخدم الجديد بنجاح، يجب علينا إرجاع حالة معلومات الحالة (يتم تمرير الحالة كحالة ByRef كـ System.Web.Security .MembershipCreateStatus). طريقة)، ونريد إرجاع مثيل لفئة MembershipUser، لذلك نعيد مثيله بهذه الطريقة:
Dim user As New MembershipUser("AccessMembershipProvider"، username, Nothing, email,passwordQuestion, Nothing, True , False, Now, لا شيء، لا شيء، لا شيء، لا شيء)
من بينها، هناك العديد من المُنشئين الذين يستخدمون أساليب فئة MembershipUser، للحصول على التفاصيل، يمكنك التحقق من MSDN هنا نستخدم فقط اسم المستخدم، والبريد الإلكتروني، وكلمة المرور، وتاريخ الإنشاء (تاريخ إنشاء الحساب، الآن هو المستخدمة هنا).
في صفحة تسجيل الدخول، لتحديد ما إذا كان المستخدم الشرعي يقوم بتسجيل الدخول، تحتاج إلى كتابة الكود التالي:
وظيفة التجاوزات العامة ValidateUser( _
اسم مستخدم ByVal كسلسلة، _
كلمة مرور ByVal كسلسلة) كـ Boolean
Dim conn كـ OleDb.OleDbConnection الجديد (connStr)
يحاول
كون.فتح ()
خافت SQL كسلسلة = _
"اختر * من العضوية أين" & _
" اسم المستخدم=@اسم المستخدم وكلمة المرور=@كلمة المرور "
Dim comm باسم OleDb.OleDbCommand(sql, conn) الجديد
comm.Parameters.AddWithValue("@username"، _
اسم المستخدم)
comm.Parameters.AddWithValue("@password"، _
كلمة المرور)
قارئ خافت كـ OleDb.OleDbDataReader = _
comm.ExecuteReader
إذا كان القارئ.HasRows ثم
العودة صحيح
آخر
العودة كاذبة
نهاية إذا
conn.Close()
يلتقط ex كاستثناء
Console.Write(ex.ToString)
العودة كاذبة
إنهاء المحاولة
وظيفة النهاية
هي هكذا تمامًا، حيث يتم إكمال موفر مخصص بسيط، والذي يمكن استخدامه مع تسجيل الدخول والتسجيل وعناصر التحكم الأخرى. عند تشغيل البرنامج تظهر لأول مرة صفحة تسجيل المستخدم، وعندما يقوم المستخدم بالتسجيل بنجاح، سيتم توجيه المستخدم إلى صفحة تسجيل الدخول، كما هو موضح في الشكل التالي: