پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش اول)
پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش دوم)
پیاده سازی سیستم احراز هویت کاربران در Asp.net MVC (بخش سوم)
در این آموزش به پیاده سازی سیستم لاگین کاربران در Asp.net mvc خواهیم پرداخت.
نکته ای که در اینجا حائز اهمیت است بدست آوردن نقش کاربران هنگام ورود به صفحاتی است که نیاز به احراز هویت می باشد. ما برای اینکار از کلاس RoleProvider دات نت استفاده خواهیم کرد برای انجام اینکار مراحل زیر را انجام دهید.
درون پوشه Models کلاسی بنام myRoleProvider ایجاد نمایید و سپس کلاس مورد نظر را از از کلاس RoleProvider مشتق بگیرید و کدهای آن را بصورت زیر ویرایش نمایید.
public class myRoleProvider : RoleProvider
{
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override string[] GetRolesForUser(string username)
{
using (usermanager.Models.MyCMS2Entities2 db = new MyCMS2Entities2())
{
return (from user in db.Users
join role in db.Roles
on user.RoleID equals role.RoleID
where user.UserName == username
select role.RoleName).ToArray();
}
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string roleName)
{
throw new NotImplementedException();
}
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
در کلاس فوق تابع GetRolesForUser را بصورتی که مشاهده میکنید ویرایش نمودیم تا سیستم هر وقت به نقش کاربری نیاز داشته باشد از این تابع استفاده نماید.در این تابع یک آرگومان بنام username وجود دارد که همانطور قبلا در اموزش بخش دوم توضیح داده شد نام کاربری در کوکی ذخیره میشود و سیستم از این طریق به آن دسترسی خواهد داشت.
در این مرحله کدهای زیر را در ابتدای تگ system.web درج نمایید.
<roleManager enabled="true" defaultProvider="myRoleProvider">
<providers>
<clear />
<add name="myRoleProvider" type="mycms2.Models.Provider.myRoleProvider" />
</providers>
</roleManager>
در قطعه کد بالا دستور clear یعنی ما خودمان به مدیریت نقشها خواهیم پرداخت و مدیریتهای قبلی که توسط دات نت بصورت خودکار ایجاد شده است را در نظر نخواهیم گرفت.
بهتر است مقادیر موجود در گزینه های defaultProvider و name همنام با کلاس ایجاد شده باشد و مقدار موجود در گزینه type برابر با مسیر کامل فضای نام کلاس مورد نظر بهمراه نام کلاس باشد.
در این مرحله به پیاده سازی سیتم لاگین خواهیم پرداخت.
اکشنهای زیر را در کنترلر Account ایجاد نمایید.
public virtual ActionResult Login(string ReturnUrl = "/")
{
if (User.Identity.IsAuthenticated)
return RedirectToAction("Index", "Home");
ViewBag.ReturnUrl = ReturnUrl;
return View();
}
[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult login(LoginViewModel login, string ReturnUrl = "")
{
if (ModelState.IsValid)
{
var user = db.Users.FirstOrDefault(u => u.UserName == login.username && u.Password == login.pass);
if (user != null)
{
if (user.IsActive == true)
{
FormsAuthentication.SetAuthCookie(login.username, login.Remember);
if (ReturnUrl != "")
{
if (Url.IsLocalUrl(ReturnUrl))
{
return Redirect(ReturnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
return Redirect("/");
}
else
{
ModelState.AddModelError("username", "حساب کاربری فوق فعال نشده است");
}
}
else
{
ModelState.AddModelError("username", "کاربری یافت نشد");
}
}
return View(login);
}
سپس جهت ایجاد ویوی اکشن login بر روی اکشن کلیک راست نمایید و گزینه Add view را انتخاب کنید و جهت ادامه کار از تصویر زیر استفاده نمایید.
سپس ویوی مورد نظر را بصورت زیر ویرایش نمایید.
@model usermanager.Models.LoginViewModel
@{
ViewBag.Title = "Login";
}
<div class="panel panel-primary">
<div class="panel-heading">
<h4 class="panel-title">ورود به سیستم</h4>
</div>
<div class="panel-body form-horizontal">
@using (Html.BeginForm("Login", "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.Remember, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<div class="checkbox">
@Html.EditorFor(model => model.Remember)
@Html.ValidationMessageFor(model => model.Remember, "", new { @class = "text-danger" })
</div>
</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>
<div class="panel-footer">
<a href="#">کلمه عبور را فراموش کردهام</a>
|
<a href="#">ثبت نام</a>|
<a href="~/">بازگشت به صفحه اصلی</a>
</div>
</div>
جهت خروج از سیستم (sign out) از اکشن زیر استفاده نمایید.
public virtual ActionResult Signout()
{
FormsAuthentication.SignOut();
return Redirect("/");
}
قبل از اجرای برنامه ابتدا نقش یکی از کاربران ایجاد شده در دیتابیس را با قرار دادن مقدار roleID به عدد یک بصورت دستی به مدیر سیستم تبدیل نمایید.
اکنون برنامه را اجرا کنید و به ادرس Admin/myadmin بروید.از آنجاییکه عملیات لاگین انجام نشده سیستم شمارا به صفحه لاگین هدایت میکند در این قسمت به مقدار پارامتر return url در قسمت ادرس مرورگر دقت نمایید. پس از موفقیت آمیز بودن عمل لاگین و مجاز بودن نقش کاربر به صفحه مقصد هدایت میشوید.
در این قسمت جهت بررسی نقش کاربر از کلاس myRoleProvider بصورت خودکار استفاده میشود.
امیدوارم این آموزش مورد توجه شما کاربران عزیز قرار گرفته باشد.