آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

بررسی ظاهر و رفتار CreateUserWizard در حال پیش فرض

به قسمت Design صفحه CreatingUserAccounts.aspx در پوشه Membership رفته و یک کنترل CreateUserWizard به بالای صفحه اضافه کنید. بعد از اضافه کردن کنترل مشصخه ID آن را به RegisterUser تغییر دهید. هماهنگونه که در شکل زیر می‌بینید این کنترل تعدادی جعبه متن برای پاسخ دادن کاربر جهت دریافت نام کاربری، گذرواژه، رایانامه و پرسش امنیتی و پاسخ آن دارد.

 

 

 

 

 

 

حال مقایسه‌ای بین این کنترل در حالت پیش فرض و رابط کاربری که ما در گام چهارم ایجاد کردیم، خواهیم داشت. در ابتدا، مشخص است که کنترل CreateUserWizard هم برای پرسش امنیتی و هم برای جواب آن دست کاربر را باز گذاشته است. همچنین در این کنترل، کنترل‌های اعتبارسنجی نیز به کار رفته است. در آخر، در کنترل CreateUserWizard جعبه متنی برای تکرار گذرواژه وجود دارد که به وسیله کنترل اعتبارسنجی، گذرواژه و تکرار آن با هم مقایسه می‌شوند.

نکته جالب توجه این است که کنترل CreateUserWizard کنترل‌های خود (جعبه متن‌ها، برچسب‌ها و ...) را بسته به نوع تنظمیات تهیه کننده عضویت نمایش داده و جواب می‌گیرد. برای مثال؛ اگر در تنظیمات Membership provider عنصر requieresQuestionAnswer با true مقداردهی شده باشد، جعبه متن‌های پرسش امنیتی و پاسخ آن نمایش داده می‌شوند. همچنین این کنترل یک کنترل اعتبارسنجی برای اعتبارسنجی گذرواژه اضافه می‌کند تا حداقل کاراکترهای مشخص شده در تنظیمات و حداقل تعداد کاراکترهای غیر الفبایی مشخص شده نیز رعایت شوند.

کنترل CreateUserWizard، همانگونه که از نامش مشخص است از کنترل Wizard ساخته شده است. کنترل Wizard برای انجام کارهایی که مرحله‌ای هستند، طراحی شده است.

کنترل CreateUserWizard دارای دو مرحله است:

·    CreateUserWizardStep: در این مرحله، کنترل اطلاعات لازم برای ایجاد یک حساب کاربری جدید را از کاربر دریافت می‌کند.

·    CompleteWizardStep: یک پیام مبنی بر ایجاد یک کاربر با موفقیت، به کاربر نشان می‌دهد.

ظاهر و رفتار کنترل CreateUserWizard می‌تواند با تبدیل مراحل آن به قالب (template) و یا اضافه کردن مرحله، تغییر کند.

سایت را اجرا کرده تا صفحه CreatingUserAccounts.aspx در مرورگرتان نمایش داده شود. در رابط کاربری CreateUserWizard اطلاعات نادرست وارد کنید. تعداد حروف گذرواژه‌ای که وارد می‌کنید از تعداد لازم کمتر باشد، و یا گذرواژه و تکرار آن یکسان نباشند، و یا نام کاربری وارد نکنید. CreateUserWizard پیام‌های خطای مناسب را به شما نمایش می‌دهد.

 

 

 

 

 

حال، مقادیر مناسب وارد کرده و روی دکمه Create User کلیک کنید. با فرض اینکه اطلاعات درست وارد شده باشند، CreateUserWizard یک حساب کاربری جدید از طریق بستر عضویت ایجاد کرده و سپس رابط کاربری CompleteWizardStep را نمایش می‌دهد (شکل زیر).

 

 

 

 

همانطور که می‌بینید بعد از نمایش پیام ایجاد کاربر جدید با موفقیت، یک دکمه با عنوان Continue وجود دارد. در حال حاضر اگر روی آن کلیک کنید فقط یک PostBack اتفاق افتاده و عملیاتی انجام نمی‌شود و باز همین صفحه نمایش داده می‌شود. در آینده در باره این دکمه صحبت خواهیم کرد.

بعد از ایجاد یک کاربر جدید، باز هم به پایگاه داده رفته و در آن نیز وجود آن را بررسی کنید.

گام پنچم: ایجاد کاربر جدید با CreateUserWizardControl

ASP.NET تعدادی کنترل Login در اختیار ما قرار می‌دهد. کنترل CreateUserWizard یکی از این کنترل‌هاست که به عنوان یک رابط کاربری جهت ایجاد یک کاربر جدید طراحی شده است.

مانند دیگر کنترل‌های Login از CreateUserWizard نیز می‌توان بدون نوشتن حتی یک خط کد استفاده کرد. این کنترل قابلیت سفارشی سازی را دارد. رویدادهایی وجود دارند که در مراحل مختلف ایجاد حساب کاربری عملیات آنها انجام می‌شود. می‌توانیم رویداد دلخواه خود را نوشته تا در خلال عملیات ایجاد حساب کاربری انجام پذیرد. گذشته از این، ظاهر کنترل CreateUserWizard نیز خیلی قابل انعطاف است. مشخصه‌های زیادی وجود دارند که به وسیله آنها می‌توانید ظاهر کنترل را تغییر دهید. همچنین می‌توانید به مراحل آن، مرحله اضافه کرده و کدهای خود را بنویسید.

گام چهارم: ایجاد یک کاربر جدید با برنامه‌نویسی

برای ایجاد یک حساب کاربری جدید از طریق بستر عضویت از متد CreateUser از کلاس Membership استفاده می‌کنیم. این متد دارای پارامترهای ورودی برای نام کاربری، گذرواژه و دیگر اطلاعات وابسته به کاربر است.

متد CreateUser دارای چهار سربار است که هرکدام تعداد متفاوتی از پارامترهای ورودی را قبول می‌کنند:

·    CreateUser (username, password)

·    CreateUser (username, password, email)

·    CreateUser (username, password, email, passwordQuestion, passwordAnswer, isApproved, MembershipCreateStatus)

·    CreateUser (username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, MembershipCreateStatus)

به این دلیل چهار سربار وجود دارند که اطلاعات مورد نیاز برای ایجاد یک حساب کاربری جدید به تنظیمات پیکربندی تهیه کننده بستر عضویت بستگی دارد.

یکی از تنظیمات پیکربندی تهیه کننده عضویت که مشخص می‌کند از کدام سربار CreateUser باید استفاده شود، نوع تنظیم requiresQuestionAnswer است. اگر مقدار requiresQuestionAnswer برابر true (مقدار پیش فرض) باشد، هنگام ایجاد یک کاربر باید یک پرسش امنیتی و پاسخ آن مشخص شوند. این اطلاعات هنگام تغییر و بازنشانی گذرواژه مورد استفاده قرار می‌گیرند. در این مواقع پرسش امنیتی که مشخص شده نمایش داده می‌شود و کاربر باید جوابی که هنگام ایجاد کاربر به این پرسش داده را وارد کند. در نتیجه، اگر requiresQuestionAnswer برابر true تنظیم شده باشد، اگر دو سربار اول ایجاد کاربر فراخوانی شوند، سیستم اعلام خطا می‌کند؛ زیرا پرسش و پاسخ امنیتی داده نشده است.

برای روشن شدن بحث استفاده از متد CreateUser یک رابط کاربری ایجاد کاربر ایجاد می‌کنیم. صفحه CreatingUserAccounts.asxp در پوشه Membership را باز کرده و کنترل‌های زیر را به آن اضافه کنید:

  •   A TextBox named Username 
  •   A TextBox named Password, whose TextMode property set to Password 
  •   A TextBox named Email 
  •  A Label named SecurityQuestion with its Text property cleared out. 
  •   A TextBox named SecurityAnswer 
  • A Button named CreateAccountButton whose Text property is set to “Create the User Account” 
  • A Label control named CreateAccountResults with its Text property cleared out

 

 

 

برچسب SecurityQuestion و جعبه متن SecurityAnswer برای نمایش پرسش امنیتی مشخص شده و دریافت جواب آن گذاشته شده‌اند. پرسش امنیتی می‌تواند توسط خود کاربر مشخص گردد و هرکس پرسش خودش را ایجاد کند. در اینجا ما به طور عمومی برای همه پرسش “What is your favorite color?” را مطرح می‌کنیم. بدین منظور در رویداد بارگذاری صفحه متن مربوط به برچسب را برابر پرسش قرار می‌دهیم:

const string passwordQuestion = "What is your favorite color";

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

SecurityQuestion.Text = passwordQuestion;

}

و برای رویداد کلیک دکمه کدهای زیر را می‌نویسیم:

protected void CreateAccountButton_Click(object sender, EventArgs e)

{

MembershipCreateStatus createStatus;

MembershipUser newUser =

Membership.CreateUser(Username.Text, Password.Text,

Email.Text, passwordQuestion,

SecurityAnswer.Text, true,

out createStatus);

switch (createStatus)

{

case MembershipCreateStatus.Success:

CreateAccountResults.Text = "The user account was successfully created!";

break;

case MembershipCreateStatus.DuplicateUserName:

CreateAccountResults.Text = "There already exists a user with this username.";

break;

case MembershipCreateStatus.DuplicateEmail:

CreateAccountResults.Text = "There already exists a user with this email address.";

break;

case MembershipCreateStatus.InvalidEmail:

CreateAccountResults.Text = "There email address you provided in invalid.";

break;

case MembershipCreateStatus.InvalidAnswer:

CreateAccountResults.Text = "There security answer was invalid.";

break;

case MembershipCreateStatus.InvalidPassword:

CreateAccountResults.Text = "The password you provided is invalid. It must be seven characters long and have at least one non-alphanumeric character.";

break;

default:

CreateAccountResults.Text = "There was an unknown error; the user account was NOT created.";

break;

}

}

عملیات رویداد کلیک با تعریف یک متغیر به نام createStatus از نوع MembershipCreateStatus آغاز می‌شود. MembershipCreateStatus یک شمارنده است که وضعیت عملیات CreateUser را نشان می‌دهد. برای مثال؛ اگر حساب کاربری با موفقیت ایجاد شود، مقدار MembershipCreateStatus برابر Success می‌شود؛ اگر عملیات به دلیل وجود یک کاربر با نام کاربری مشابه تمام نشود، مقدار MembershipCreateStatus برابر DuplicateUserName می‌شود. در سربار ایجاد کاربر که ما استفاده می‌کنیم، نیاز است که مقدار MembershipCreateStatus به متد ایجاد کاربر به عنوان پارامتر out ارسال شود. این پارامتر درون متد CreateUser مقدار مناسب می‌گیرد و ما بعد از فراخوانی این متد می‌توانیم با بررسی مقدار آن مشخص کنیم که ایجاد کاربر با موفقیت بوده است یا نه.

بعد از فراخوانی CreateUser با استفاده از دستور switch مقدار creatStatus بررسی گشته و پیام متناسب با آن به کاربر نمایش داده می‌شود.

 

 

 

 

 

 

 

 

 

 

 

 

پس از ایجاد چند کاربر با مراجعه به SecurityTutorials.mdf و جداول aspnet_Users و aspnet_Membership از ایجاد شدن آن اطیمنان حاصل کنید.