ما برای اینکه بتوانیم تعیین کنیم که نام کاربری و رمز عبور درست است نیاز داریم که اعتبارنامههای کاربران در محلی ذخیره شود تا بتوانیم نام کاربری و رمز عبور را با آنها مقایسه کنیم.
تا قبل ازASP.NET 2.0 ، توسعه دهندگان مجبور بودند خودشان محلی برای نگهداری اعتبارنامههای کاربران ایجاد کنند و کدهایی بنویسند که اعتبار نام کاربری و رمز عبور وارد شده را تعیین کند. بیشتر توسعهدهندگان اطلاعات کاربران را در یک پایگاه داده شامل یک جدول با نام Users با ستونهایی مانند UserName, Password, Email, LastLoginDate و از این دست، میساختند. این جدول برای هر کاربر یک رکورد داشت. نام کاربر و رمز عبور وارد شده در قالب یک پرس و جو[1] از پایگاه داده چک میشد، به این صورت که نام کاربر در دادهها وجود داشته باشد و سپس رمز عبور آن نیز صحیح باشد. باASP.NET 2.0 توسعه دهندگان باید یکی از تهیه کنندگان عضویت را برای ذخیره کاربران استفاده کنند. در حال حاضر با فراخوانی کلاس عضویت[2] و متد تایید اعتبار کاربر[3] به سادگی اعتبارنامه کاربر را تعیین اعتبار میکنیم. متد تایید اعتبار کاربر، یک مقدار بولی که تعیین کننده درستی اعتبار نام کاربر و رمز عبور است را برمیگرداند.
در حال حاضر به وسیله کدهای داخل خود صفحه ورود احراز هویت را انجام میدهیم. کدهای زیر در رویداد کلیک دکمه تایید نوشته شوند:
protected void LoginButton_Click(object sender, EventArgs e)
{
// Three valid username/password pairs: Scott/password, Jisun/password, and Sam/password.
string[] users = { "Scott", "Jisun", "Sam" };
string[] passwords = { "password", "password", "password" };
for (int i = 0; i < users.Length; i++)
{
bool validUsername = (string.Compare(UserName.Text, users[i], true) == 0);
bool validPassword = (string.Compare(Password.Text, passwords[i], false) == 0);
if (validUsername && validPassword)
{
// TODO: Log in the user...
// TODO: Redirect them to the appropriate page
}
}
// If we reach here, the user's credentials were invalid
InvalidCredentialsMessage.Visible = true;
}
همانگونه که میبینید سه حساب کاربری معتبر وجود دارد: Scott, Jisum و Sam و رمز عبور همه آنها password است. برنامه در داخل یک حلقه، درون آرایههای users و passwords را جهت مطابقت نام کاربر و رمز عبور معتبر میکاود. اگر نام کاربر و رمز عبور معتبر بود، ما باید کاربر را وارد و سپس به صفحه مورد نظر هدایت کنیم. اگر اعتبارنامه نامعتبر بود، برچسب InvalidCredentialsMessage را نمایش میدهیم.
اشاره کردم که وقتی کاربر اعتبارنامه معتبر وارد میکند به صفحه مناسب هدایت میشود. فکر میکنید صفحه مناسب چیست؟ به یاد دارید که، وقتی که کاربر میخواهد صفحهای که برای دیدن آن مجوزدهی نشده است را ببیند، FormsAuthenticationModule به طور خودکار او را به صفحه ورود هدایت میکند. هنگام انجام این کار، FormsAuthenticationModule نشانی مورد درخواست را در رشته پرس و جو از طریق پارامتر ReturnUrl نگهداری میکند. به این معنی که اگر کاربر بخواهد صفحه ProtectedPage.aspx را که برای آن مجوزدهی نشده است را ببیند، FormsAuthenticationModule او را به نشانی زیر هدایت میکند:
Login.aspx?ReturnUrl=ProtectedPage.aspx
به محض ورود موفقیت آمیز، کابر باید به ProtectedPage.aspx هدایت شود. ممکن است کاربر به خواست خود بخواهد اول صفحه ورود را ببیند، در این صورت بعد از ورود، کاربر باید به شاخه ریشه، صفحه Default.aspx، فرستاده شود.
[1] Query
[2] Membership class
[3] ValidateUser method
عالی بود