بعد از راه اندازی برنامه با سرویس های مربوط به Identity، ما آماده پیاده سازی ثبت نام کاربر هستیم. من فایلهای مورد نیاز را اضافه کردهام تا بتوانیم مدل ، View و Controller مربوط به ثبت نام کاربر را داشته باشیم. View Model مربوط به ثبت نام دارای ویژگی هایی است مانند ایمیل و رمز عبور ، که ما برای دریافت اطلاعات یک کاربر جدید می گیریم. View مربوط به ثبت نام با مدل مربوطه در ارتباط است. ما بر روی account controller که بخشی از آن پیاده سازی شده است، تمرکز خواهیم کرد. کلاس user manager بخش مهمی از asp.net core identity است زیرا دارای تمام APIهای لازم برای مدیریت کاربران است. و ما آن را به سازنده(constructor) کنترلر(controller) تزریق کرده ایم. زمانی که سرویس های مربوط به Identity را به کلاس startup خود اضافه کردیم، وابستگی های مربوطه به مدیریت کاربران نیز ثبت شده بود.
اکشن register که از نوع httpget می باشد برای نمایش صفحه ثبت نام است.
// GET: /Account/Register
[HttpGet]
public IActionResult Register()
{
return View();
}
هنگامی که کاربر روی دکمه ثبت نام کلیک می کند، متد از نوع httppost متناظر با ثبت نام (register) فراخوانی می شود. اینجاست که باید کاربر جدید خود را اضافه کنیم.
// POST: /Account/Register
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
IdentityUser user = new IdentityUser()
{
Email = model.Email,
UserName = model.Email
};
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
return RedirectToAction("Login", "Account");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
همانطور که در کد مشاهده می شود، ابتدا یک Instance از کلاس IdentityUser ایجاد می کنیم و با استفاده از ویو مدل register ، مشخصه های مربوط به user را ست می کنیم. در مرحله بعد، متد آسنکرون ایجاد کاربر را از آبجکت UserManager برای ایجاد User صدا میزنیم که آبجکت(شیء) کاربر و رمز عبور را به عنوان ورودی میگیرد. UserManager فقط روشهای آسنکرون را عرضه می کند، بنابراین باید برخی تغییرات و اصلاحات را انجام دهیم. بیایید کلمه کلیدی await را اضافه کنیم تا ابتدا در انتظار تکمیل عملیات مربوط به متد باشیم. و همچنین باید نوع و signature متد را تغییر دهیم. ادامه دهید و کلمه کلیدی async را اضافه کنید، و ما باید یک خروجی Task و از نوع IActionResult را برگردانیم.
متد CreateAsync یک شی از نوع IdentityResult با ویژگی بولین به عنوان موفق یا ناموفق بودن عملیات برمی گرداند. و این به ما می گوید که آیا کاربر با موفقیت ایجاد شده است یا خیر. اگر عملیات موفقیت آمیز است، کاربر را به صفحه ورود هدایت می کنیم.
برای هدایت کردن، ما نام action را وارد می کنیم که login است و کنترلر مورد نظر هم Account Controller است. اگر نتیجه موفقیت آمیز نبود، یک ویژگی خطا وجود دارد که دلایل عدم موفقیت در ورود را فهرست وار نمایش می دهد. و، در ادامه می بینید که در یک حلقه، کل مجموعه خطاها را به صورت تک تک به مدل خود اضافه می کنیم.
به عنوان مثال، اگر نام کاربری وارد شده توسط شخص دیگری قبلاً گرفته شده باشد یا رمز عبور وارد شده درست نباشد، ممکن است خطایی رخ دهد. ما خطاها را در مدل برمی گردانیم و آنها را در Validation Summary درون View نمایش می دهیم.
اکنون که بدنه Action ثبت نام ما در Account Controller تکمیل شده است، بیایید آن را امتحان کنیم. ادامه دهید و پروژه را اجرا کنید، و به آدرس URL ثبت نام بروید، که عبارت است از /account/register.
ما اطلاعات حساب کاربری جدید خود را وارد می کنیم. رمز عبور انتخابی من باید الزامات قوی بودن پیش فرض رمز عبور برای asp.net core identity را برآورده کند. رمز عبور باید حداقل یک حرف کوچک و یک حرف بزرگ، حداقل یک عدد، یک کاراکتر خاص و حداقل شش کاراکتر داشته باشد. اگر ثبت نام من موفقیت آمیز باشد، به صفحه ورود هدایت می شوم. بیایید به ویژوال استودیو برگردیم و مطمئن شویم که حساب کاربری ما در پایگاه داده درج شده است. در منوی view، SQL Server object explorer را انتخاب کنید. در پایگاه داده Roux Academy، با کلیک روی view data، جدول AspNetUsers را باز کنید.
مشاهده می کنیم که در اینجا رکورد کاربر جدید با ایمیلی که وارد کردم، رمز عبور کدگذاری(هش) شده و نام کاربری من قرار دارد. این کاربر الان آماده ورود به پورتال دانشجویی ایمن است.