توضیحات و دانلود

فرم ورود کاربر با بانک اطلاعاتی Entity Framework در ASP.Net MVC
0 0
فرم ورود کاربر با بانک اطلاعاتی Entity Framework در ASP.Net MVC

با سلام در این مقاله با یک مثال توضیح می دهیم که چگونه می توان فرم ورود به سیستم کاربری را در ASP.Net MVC Razor پیاده سازی کرد. این فرم ورود کاربر با استفاده از احراز هویت فرم های سفارشی و Entity Framework پیاده سازی می شود.
پیکربندی بسته‌ها و فعال کردن اعتبار سنجی Client Side
اعتبار سنجی فرم ورود کاربر با استفاده از حاشیه نویسی داده های Model و jQuery در Client Side انجام خواهد شد.
توجه :

به طور پیش فرض اعتبارسنجی انجام شده با استفاده از ویژگی های حاشیه نویسی Data Server Side است. و از این رو ، برای کارآمد شدنClient Side ، اعتبار سنجی Client Side باید فعال شود.
بانک اطلاعات
 از همان دسته کاربرانی که در مقاله استفاده شده در فرم ساده ثبت نام کاربر با بانک اطلاعاتی Entity Framework در ASP.Net MVC استفاده شده است .

توجه :

می توانید جدول بانک اطلاعاتی SQL را با کلیک روی لینک دانلود کنید. فایل SQL را بارگیری کنید
روش ذخیره شده برای اعتبارسنجی اعتبار کاربر
از روش ذخیره شده زیر برای اعتبارسنجی اعتبار کاربر استفاده می شود ، این روش ذخیره شده ابتدا بررسی می کند که آیا نام کاربری و رمز عبور صحیح است یا نه.
اگر نام کاربری و رمز عبور صحیح باشد اما کاربر فعال نشده باشد کد برگشت داده شده -2 است.
اگر نام کاربری و رمز عبور صحیح باشد و حساب کاربری فعال شده باشد ، کاربر با استفاده از روش ذخیره شده باز می گردد.

CREATE PROCEDURE [dbo].[Validate_User]
      @Username NVARCHAR(20),
      @Password NVARCHAR(20)
AS
BEGIN
      SET NOCOUNT ON;
      DECLARE @UserId INT, @LastLoginDate DATETIME
     
      SELECT @UserId = UserId, @LastLoginDate = LastLoginDate
      FROM Users WHERE Username = @Username AND [Password] = @Password
     
      IF @UserId IS NOT NULL
      BEGIN
            IF NOT EXISTS(SELECT UserId FROM UserActivation WHERE UserId = @UserId)
            BEGIN
                  UPDATE Users
                  SET LastLoginDate = GETDATE()
                  WHERE UserId = @UserId
                  SELECT @UserId [UserId] -- User Valid
            END
            ELSE
            BEGIN
                  SELECT -2 -- User not activated.
            END
      END
      ELSE
      BEGIN
            SELECT -1 -- User invalid.
      END
END

اضافه کردن روش جدید ذخیره شده به Entity Framework Data Model
Entity Framework قبلاً در مقاله ثبت نام کاربر پیکربندی شده است و از این رو ما با گام بعدی ادامه می دهیم یعنی اضافه کردن روش جدید Stored (که قبلاً در مورد آن بحث شده بود) به الگوی موجود داده میباشد  .
برای این کار ، گزینه User Data Model را باز کرده و سپس بر روی Table User راست کلیک کرده و از منوی Context بر روی گزینه Update Model from Database کلیک کنید.

 

عملکرد فوق پنجره گفتگو Update Wizard را باز می کند ، در آنجا شما باید Stored Procedure که اخیراً اضافه شده است را انتخاب کنید و روی دکمه Finish کلیک کنید.

پس از اضافه شدن Stored Procedure ، مجدداً باید بر روی Table User راست کلیک کرده و از منوی Context بر روی گزینه Add New و سپس گزینه Function Import کلیک کنید.

عملکرد فوق پنجره Add Function Import Dialog را باز می کند. در اینجا شما نیاز دارید :
1. Function Import Name : نام روشی را که برای اجرای روش ذخیره شده استفاده خواهد شد را مشخص کنید.
2. Stored Procedure / Function Name : روش ذخیره شده / عملکردی که باید وارد شود را انتخاب کنید.
3. Returns a Collection Of : رویه ذخیره شده استفاده شده در این مقاله یک مقیاس Scalar را برمی گرداند و از این رو همان انتخاب می شود.
در آخر اینکه تمام موارد فوق تمام شد ، بر روی دکمه OK کلیک کنید.

Model
کلاس Model User.cs مانند مقاله ثبت نام کاربر باقی می ماند به جز یک تغییر یعنی یک ویژگی جدید Memmed اضافه شده است.

namespace User_Login_MVC
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
 
    public partial class User
    {
        public int UserId { get; set; }
 
        [Required(ErrorMessage = "Required.")]
        public string Username { get; set; }
 
        [Required(ErrorMessage = "Required.")]
        public string Password { get; set; }
 
        [Required(ErrorMessage = "Required.")]
        [Compare("Password", ErrorMessage = "Passwords do not match.")]
        public string ConfirmPassword { get; set; }
 
        [Required(ErrorMessage = "Required.")]
        [EmailAddress(ErrorMessage = "Invalid email address.")]
        public string Email { get; set; }
 
        public System.DateTime CreatedDate { get; set; }
 
        public Nullable<System.DateTime> LastLoginDate { get; set; }
 
        public bool RememberMe { get; set; }
    }
}

توجه :

برای توضیح درمورد یادداشتهای مختلف داده استفاده شده برای اعتبار سنجی های لازم ، ایمیل و تأیید اعتبار رمز عبور ، لطفاً مقالات زیر را مطالعه کنید :
اعتبار سنجی (validation) Client Side با استفاده از ویژگی های Annotation و جی کوئری در ASP.Net MVC Razor
استفاده از Annotations و جی کوئری در رمز عبور Client Side و تایید اعتبار رمز عبور در ASP.Net MVC
تأیید اعتبار ایمیل Client Side با استفاده از ویژگی های Annotation و جی کوئری در ASP.Net MVC
نامهای نام
شما باید فضای نامهای زیر را وارد کنید.

using System.Web.Security;

Controller
Controller از چهار روش تشکیل شده است.
روش اداره عملیات GET برای ورود به سیستم
در داخل این روش Action ، به سادگی نمایش داده می شود. این روش  از AllowAnonymous Data Annotation استفاده  شده است که نشان از تأیید اعتبار فرم بر مبنای دسترسی به این روش بدون احراز هویت دارد.
روش  دستیابی به عملکرد GET برای پروفایل
در داخل این روش Action ، به سادگی نمایش داده می شود. این روش از Autnotize Data Annotation استفاده شده است که نشان از تأیید هویت فرم بر مبنای دسترسی به این روش دارد.
روش دستیابی به عملکرد POST برای ورود به سیستم
در داخل این روش که روش ValidateUser گفته می شود , روش Stored Procedure را که اعتبار کاربر را تأیید می کند ، اجرا می کند.
وضعیت برگشت داده شده از Stored Procedure ذخیره شده است و اگر مقدار آن -1 نباشد (نام کاربری یا رمز عبور نادرست است) یا -2 نباشد(حساب کاربری فعال نشده است) پس از تنظیم کوکی تأیید اعتبار فرم های کاربر به View هدایت می شود.
برای وضعیت -1 و -2 ، این پیام با استفاده از شی ViewBag برای کاربر نمایش داده می شود.
روش  دستیابی به عملکرد POST برای Logout
در داخل این روش  ، که روش Signout از Authentication Forms گفته می شود , کوکی تصدیق فرم ها را پاک می کند و کاربر به Index View هدایت می شود.

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
 
    [Authorize]
    public ActionResult Profile()
    {
        return View();
    }
 
    [HttpPost]
    [AllowAnonymous]
    public ActionResult Index(User user)
    {
        UsersEntities usersEntities = new UsersEntities();
        int? userId = usersEntities.ValidateUser(user.Username, user.Password).FirstOrDefault();
 
        string message = string.Empty;
        switch (userId.Value)
        {
            case -1:
                message = "Username and/or password is incorrect.";
                break;
            case -2:
                message = "Account has not been activated.";
                break;
            default:
                FormsAuthentication.SetAuthCookie(user.Username, user.RememberMe);
                return RedirectToAction("Profile");
        }
 
        ViewBag.Message = message;
        return View(user);
    }
 
    [HttpPost]
    [Authorize]
    public ActionResult Logout()
    {
        FormsAuthentication.SignOut();
        return RedirectToAction("Index");
    }
}

View
Index
در داخل View ، در اولین خط کلاس User Model به عنوان Model برای View اعلام می شود.
View شامل یک فرم HTML است که با استفاده از روش Html.BeginForm با پارامترهای زیر ایجاد شده است.
ActionName - نام عمل در این حالت Index است.
ControllerName - نام Controller در این حالت Home است.
FormMethod - این روش فرم یعنی GET یا POST را مشخص می کند. در این حالت روی POST تنظیم می شود.
در داخل View ، از چهار عملکرد HTML Helper استفاده شده است :
1. Html.TextBoxFor - ایجاد TextBox برای ویژگی  Model.
2. Html.PasswordFor - ایجاد یک TextBox رمز عبور برای ویژگی Model.
3. Html.ValidationMessageFor - نمایش پیام اعتبار سنجی برای ویژگی.
4. Html.CheckBoxFor - ایجاد یک CheckBox برای ویژگی Model.
همچنین دکمه ارسال وجود دارد که هنگام کلیک ، فرم ارسال می شود.
بسته های اسکریپت jQuery و اعتبارسنجی jQuery در انتهای Modelبا استفاده از عملکرد Scriptts.Render ارائه می شوند.
ViewBag موضوع پیام برای NULL بررسی می شود و اگر NULL نباشد ، پیام با استفاده از جعبه پیام هشدار جاوا اسکریپت نمایش داده می شود.

@model User_Login_MVC.User
 
@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
    <style type="text/css">
        body {
            font-family: Arial;
            font-size: 10pt;
        }
 
        table {
            border: 1px solid #ccc;
            border-collapse: collapse;
        }
 
        table th {
            background-color: #F7F7F7;
            color: #333;
            font-weight: bold;
        }
 
        table th, table td {
            padding: 5px;
            border: 1px solid #ccc;
        }
 
        .error {
            color: red;
        }
    </style>
</head>
<body>
    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <th colspan="3">
                    Login
                </th>
            </tr>
            <tr>
                <td>
                    Username
                </td>
                <td>
                    @Html.TextBoxFor(m => m.Username)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.Username, "", new { @class = "error" })
                </td>
            </tr>
            <tr>
                <td>
                    Password
                </td>
                <td>
                    @Html.PasswordFor(m => m.Password)
                </td>
                <td>
                    @Html.ValidationMessageFor(m => m.Password, "", new { @class = "error" })
                </td>
            </tr>
            <tr>
                <td>
                    Remember Me
                </td>
                <td>
                    @Html.CheckBoxFor(m => m.RememberMe)
                </td>
                <td>
                   
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <input type="submit" value="Submit"/>
                </td>
                <td></td>
            </tr>
        </table>
    }
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @if (@ViewBag.Message != null)
    {
        <script type="text/javascript">
            $(function () {
                alert("@ViewBag.Message")
            });
        </script>
    }
</body>
</html>

پروفایل
پروفایل مشخصات نام کاربری را که وارد شده است نمایش می دهد و همچنین از فرم HTML با لینک HTML Anchor برای عملکرد Logout تشکیل شده است.
با کلیک بر روی لینک Logout ، فرم ارسال می شود و روش Logout Action فراخوانی می شود.

@{
    Layout = null;
}
 
<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Profile</title>
    <style type="text/css">
        body {
            font-family: Arial;
            font-size: 10pt;
        }
    </style>
</head>
<body>
    <div>
        Welcome
        <b>@HttpContext.Current.User.Identity.Name</b>
        <br/>
        <br/>
        @using (Html.BeginForm("Logout", "Home", FormMethod.Post))
        {
            <a href="javascript:;" onclick="document.forms[0].submit();">Logout</a>
        }
    </div>
</body>
</html>

پیکربندی Web.Config
شما باید تنظیمات زیر را در فایل  Web.Config در بخش < system.web > اضافه کنید .

<authentication mode="Forms">
      <forms defaultUrl="/Home/Profile" loginUrl="/Home/Index" slidingExpiration="true" timeout="2880"></forms>
</authentication>

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :