منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
Membership Authentication & Roles Authorizationالجزء الثاني - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم برمجة وتطوير المواقع (http://vb4arb.com/vb/forumdisplay.php?fid=51)
+--- قسم : قسم ASP.NET (http://vb4arb.com/vb/forumdisplay.php?fid=52)
+---- قسم : قسم مقالات ASP.NET (http://vb4arb.com/vb/forumdisplay.php?fid=54)
+---- الموضوع : Membership Authentication & Roles Authorizationالجزء الثاني (/showthread.php?tid=4603)



Membership Authentication & Roles Authorizationالجزء الثاني - RaggiTech - 29-09-12

كاتب الموضوع عمر المستشار

السلام عليكم ورحمة الله وبركاتة ناتي الان الى الجزء الثاني من ال

Membership Authentication & Roles Authorization

بناء صفحة لتسجيل المستخدمين "register.aspx" :
أعتقد أن اسم الصفحة يصف مهمتها، بم بإضافة صفحة بإسم register.aspx بالشكل التالي :


لن نكتب كود تصميم الصفحة تركتة لكم في المثال المرفق وفي حدث تخزين الاسم للعضة نكتب الكود التالي

/******************
saveButton_Click handler
************
protected void saveButton_Click(object source, EventArgs e)
{
Utilities.RegisterNewUser(usernameTextBox.Text, passwordTextBox.Text, emailTextBox.Text);
statusLabel.Text = string.Format("Thank you '{0}' for yourregistration.", usernameTextBox.Text);
}
[/code]
إضافة صفحة تسجيل الدخول "login.aspx" :
هذه الصفحة لا تحتاج إلى شرح، ولكن قبل أن نضيفها أود أن أخبركم بأنه لن نستخدم الـ Login Control الموجود في الأدوات بل سنستخدم فقط TextBox للقيام بعملية الـ Authentication Formalities، ولكن قبل ذلك يجب أن نضيف AuthenticateUser Method في الـ Utilities Clss والغرض منها هو القيام بعملية الـ Authentication Formalities، كما هو موضح في التالي :
[code]

publicstaticboolAuthenticateUser(stringusername,stringpassword)
{
boolisAuthenticated=false;
using(SqlConnectioncon=newSqlConnection(connectionString))
{
SqlCommandcmd=newSqlCommand(
"select count(uname) fromusers_tbl where uname=@uname and password=@password",
con);
cmd.Parameters.AddWithValue("uname",username);
cmd.Parameters.AddWithValue("password",password);
con.Open();
isAuthenticated=int.Parse(cmd.ExecuteScalar().ToString())==1;
}
returnisAuthenticated;
}
[/code]
الآن سنقوم بإنشاء صفحة الـ login.aspx وسوف نرى كيفية إستخدام System.Web.Security.FormsAuthentication.RedirectFr omLoginPage حيث أنها ستقوم بتسجيل cookie في متصفح المستخدم يدل على أن هذا المستخدم تم المصادقة عليه وبعد ذلك سيتم إعادة توجيهه إما إلى الصفحة التي تطلب فيها تسجيل الدخول (أي كانت خاصة بحيث لا يدخلها من ليس له حساب أو من يجب أن ينتمي إلى مجموعة أو Role معين، سوف نراى ذلك لاحقا)، أو إلى الصفحة الإفتراضية التي تم تحديدها في ملف web.config في العنصر authentication، كما هو موضح في الكود التالي :
[code]

لن نكتب كود تصميم الصفحة اتركة لكم في المرفقات وادناة الكود البرمجي الخاص بزر الدخول
******************
loginButton_Click handler
***********/
protected void loginButton_Click(object source, EventArgs e)
{
if (Utilities.AuthenticateUser(usernameTextBox.Text, passwordTextBox.Text))
FormsAuthentication.RedirectFromLoginPage(username TextBox.Text, false);
else errorLoginLabel.Visible = true;
}
[/code]


طبعا لو تلاحظوا الـ System.Web.Security.FormsAuthentication.RedirectFr omLoginPage تاخذ two arguments الأولى عبارة عن إسم المستخدم الي راح يصدر له Cookie اما الثانية فهي قيمة بولينية لو true معناته إن الـ cookie راح تكون دائمة أو ثابته "Persistence"، لو كان false فمعناته راح تنتهي "expire" الـ cookie بمجرد ما يقوم المستخدم بإغلاق المتصفح، لاحظوا إننا أرسلنا الـ argument الثاني بقيمة false ويعود السبب إلى إمكانية حفظ الـ cookie لمدة 50 سنة (can you believe that crap!!!!) وهذا قد يولد ثغرة إمكانية التنصت أو أخذ الـ cookie وبالتالي راح نخسر الـ privacy factor.

إضافة LoginName Control في الصفحة "Default.aspx" :
سوف نقوم بإضافة LoginName Control في الصفحة المذكورة أعلاة فقط لنرى هل سوف تقوم الـ ASP dotNet فعلا بتسجيل cookie وبالتالي ظهور اسم المستخدم أم لا، ,وأيضا سوف نستخدم الـ LoginStatusControl وهو يقوم بعرض رابط إما تسجيل الدخول أو تسجيل الخروج على حسب حالة المستخدم الذي يتصفح الصفحة ، قم بكتابة التالي :
expand |plain text
<h3 style="text-align: center;">
Default.aspx
</h3>
<p>
<asp:LoginName ID="loginName" runat="server" FormatString="Welcome '{0}'" />
</p>
<asp:LoginStatus ID="loginStatus" runat="server" LoginText="Click here to login"
LogoutText="Click here to logout" />
<br />
<a href="register.aspx">Not registered? What are you waiting for ?</a>


لاحظوا أن الـ LoginStatus سيقوم بقراءة الإعدادات من ملف web.config والمقصود بها صفحة تسجيل الدخول والصفحة الإفتراضية التي سيعاد توجيه المستخدم إليها بعد تسجيل الخروج

بعد كل ما تم شرحه بقي علينا أن نرى كيفية إضافة Roles وكيفية تحديد مستوى الوصل إلى بعض موارد الموقع إما على حسب حالة المستخدم (Authenticated / Anonymous) أو على حسب أي Role ينتمي إليه المستخدم. بإذن الله سنكمل في الدرس القادم.

أتمنى أن أكون قد أصبت في قولي وأن يكون شرحي واضح وموجزوأيضا أتمنى لكم التوفيق.

مرفق المشروع الذي أستند عليه في شرحي هذا


الله يبارك بيك اخي كاتب هذة المقالة الاكثر من رائعه الف الف شكر

المصدر


المثااال