برای ایجاد یک حساب کاربری جدید از طریق بستر عضویت از متد 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 را باز کرده و کنترلهای زیر را به آن اضافه کنید:
برچسب 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 از ایجاد شدن آن اطیمنان حاصل کنید.
سلام
دستت درد نکنه چیزی که 4سال پیش نوشتی هنوزم به درد میخوره