با سلام خدمت کاربران عزیز فکر بکر، در ادامه اموزش پیاده سازی سیستم احراز هویت کاربران ابتدا به پیاده سازی سیستم ثبت نام کاربران خواهیم پرداخت.
ابتدا یک کنترلر بنام Account به پروژه اضافه نمایید.
سپس کدهای زیر را در قسمت webconfig به ابتدای تگ system.web اضافه نمایید.
<authentication mode="Forms">
<forms name="mycms2" defaultUrl="/" loginUrl="/Account/Login" timeout="43200" />
</authentication>
در واقع با کدهای بالا سیستم احراز هویت را از حالت پیشفرض به حالت forms قرار دادیم و مدت زمان نگهداری اطلاعات کاربر پس از آخرین لحظه ورود را به عدد 43200 یعنی بمدت یکماه می باشد و در واقع این مقدار برای مواقعی که کاربر بر روی تیک مرا بخاطر بسپار کلیک میکند در ارتباط میباشد. و در نهایت سیستم بصورت خودکار یک کوکی چهت نگهداری اطلاعات کاربر ایجاد میکند.
در این مرحله یک viewmodel برای حساب کاربری جهت ثبت نام کاربران و لاگین نمودن آنها ایجاد میکنم لذا کلاسی بنام AccountViewModels درون پوشه Models ایجاد نمایید و محتویات آنرا بصورت زیر ویرایش کنید.
public class LoginViewModel
{
[Key]
public int ID { get; set; }
[DisplayName("نام کاربری")]
[Display(Name = "نام کاربری")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string username { get; set; }
[Display(Name = "کلمه عبور")]
[DataType(DataType.Password)]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string pass { get; set; }
[Display(Name = "مرا به خاطر بسپار")]
public bool Remember { get; set; }
}
public class RegisterViewModel
{
[Key]
public int ID { get; set; }
[Display(Name = "نام کاربری")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
public string Username { get; set; }
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[DataType(DataType.Password)]
public string pass { get; set; }
[Display(Name = "تکرار کلمه عبور")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[System.ComponentModel.DataAnnotations.Compare("pass", ErrorMessage = "کلمه های عبور مغایرت دارند")]
[DataType(DataType.Password)]
public string repass { get; set; }
[Display(Name = "ایمیل")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نمی باشد")]
public string email { get; set; }
}
سپس اکشنهای زیر را جهت ایجاد فرم ثبت نام کاربر درون کنترلر Account درج نمایید.
public virtual ActionResult Register()
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult Register(RegisterViewModel register)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "Home");
}
if (ModelState.IsValid)
{
if (db.Users.Any(p => p.UserName == register.Username))
{
ModelState.AddModelError("Username", "نام کاربری معتبر نیست");
return View(register);
}
else
{
Models.Users user = new Models.Users();
user.UserName = register.Username;
user.Password = register.pass;
user.Email = register.email;
user.IsActive = true;
user.ActiveCode = Guid.NewGuid().ToString().Replace("-", "");
user.RoleID = 2;
user.RegisterDate = DateTime.Now;
db.Users.Add(user);
db.SaveChanges();
return View("RegisterSuccess");
}
}
return View();
}
در قطعه کد بالا کاربران بصورت پیشفرش نقشی با کد شماره 2 که همان کاربران ثبت نام شده است را اختصاص میدهیم . و مقدار پیش فرض ActiveCode را به True قرار دادیم چرا که در این آموزش به نحوه فعالسازی کاربران از طریق ارسال ایمیل نخواهیم پرداخت.
در پایان پس از موفقیت آمیز بودن عملیات ثبت نام ، کاربر را به ویوی RegisterSuccess هدایت میکنیم بنابراین یک ویو به همین نام درون پوشه View و در قسمت ویوی َAccount ایجاد کنید و محتویات آنرا بصورت زیر ویرایش نمایید.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="alert alert-warning">
<p class="text-muted">ثبت نام شما با موفقیت انجام شد . </p>
<a href="~/" class="btn btn-success">بازگشت به صفحه اصلی</a>
</div>
در این مرحله به ساخت ویوی Register خواهیم پرداخت.
ابتدا پروژه را Build نمایید سپس بر روی اکشن Register کلیک راست کنید و سپس گزینه Add view را انتخاب نمایید و در پایان با توجه به شکل زیر گزینه های مورد نظر جهت ایجاد ویو را انتخاب نمایید.
همانطور که در تصویر بالا میبینید از آنجاییکه ما از viewModel استفاده میکنیم بنابراین مقدار گزینه Data context class را خالی قرار میدهیم.
در پایان محتویات ویو را بصورت زیر ویرایش میکنیم.
@model usermanager.Models.RegisterViewModel
@{
ViewBag.Title = "Register";
}
<h2>ثبت نام</h2>
@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Username, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.pass, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.pass, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.pass, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.repass, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.repass, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.repass, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.email, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.email, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.email, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="ثبت نام" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
اکنون برنامه را اجرا کنید و جهت ثبت نام به مسیر Account/Register بروید.