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

تایید فرم با استفاده از کوکی ها در ASP.Net MVC
0 0
تایید فرم با استفاده از کوکی ها در ASP.Net MVC

با سلام در این مقاله با یک مثال توضیح خواهیم داد که چگونه می توان مکانیزم ورود به سیستم را با استفاده ازFormsAuthentication Ticket (کوکی) در ASP.Net MVC Razor پیاده سازی کرد.
در این مقاله ، تأیید فرم ها با استفاده ازتایید فرم های سفارشی و چارچوب تایید درASP.Net MVC Razor توضیح داده شده است.
توجه :

در مقاله های قبلی خود ارسال ایمیل تأییدیه کاربر پس از ثبت نام با لینک فعال سازی درASP.Net MVC را توضیح داده ایم

پیکربندی بسته‌ها و فعال کردن اعتبار سنجی Client Side
اعتبار سنجی فرم ورود کاربر با استفاده از حاشیه نویسی داده های Model و jQuery در Client Side انجام خواهد شد.

توجه :

به طور پیش فرض اعتبارسنجی انجام شده با استفاده از ویژگی های Annotation Data Server Side است. و از این رو ، برای کارآمدن Client Side ، اعتبار سنجی Client Side باید فعال شود.
بانک اطلاعات
 از همان دسته کاربرانی که در مقاله استفاده شده در فرم ساده ثبت نام کاربر با بانک اطلاعاتی سازمانی در 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

اضافه کردن روش جدید ذخیره شده به داده های Model در Entity Framework
Entity Framework قبلاً در مقاله فرم ثبت نام کاربر پیکربندی شده است و از این رو ما با گام بعدی ادامه می دهیم یعنی اضافه کردن روش Stored Procedure به Entity Framework داده Model موجود.
برای این کار ، گزینه 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; }
    }
}

توجه :

برای توضیح در مورد  Data Annotations مختلف استفاده شده برای اعتبار سنجی های لازم ، ایمیل و تأیید اعتبار رمز عبور، لطفاً مقالات زیر را مطالعه کنید:
تأیید اعتبار ایمیل Client Side با استفاده از ویژگی های Annotation و جی کوئری در ASP.Net MVC
استفاده از 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 که به سادگی نمایش داده می شود. این روش Action با Autnotize Data Annotation ایجاد شده است که نشان از تأیید اعتبار فرم بر مبنای دسترسی به این روش را دارد.
روش دستیابی به عملکرد POST برای ورود به سیستم
در داخل این روش که به روش ValidateUser گفته می شود , روش Stored Procedure را اجرا می کند که اعتبار کاربر را ارزیابی می کند.
وضعیت برگشت داده شده از Stored Procedure ذخیره می شود و اگر مقدار آن -1 نباشد (نام کاربری یا رمز عبور نادرست است) یا -2 (حساب کاربری فعال نشده است) پس از تنظیم کوکی تأیید اعتبار فرم کاربر به View هدایت می شود.
برای وضعیت -1 و -2 ، این پیام با استفاده از شی ViewBag برای کاربر نمایش داده می شود.
روش دستیابی به عملکرد POST برای Logout
در داخل این روش که به روش Signout از Authentication Forms گفته می شود , کوکی تصدیق فرم ها را پاک می کند و کاربر به 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
فهرست مطالب
در داخل 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 Validation در انتهای Model با استفاده از عملکرد Scriptts.Render ارائه می شوند.
ViewBag موضوع پیام برای NULL را بررسی می کند و اگر NULL نباشد ، پیام با استفاده از جعبه پیام هشدار JavaScript نمایش داده می شود.

@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>

پروفایل
پروفایل View نام کاربری ورود به سیستم کاربر را نشان می دهد و همچنین شامل یک فرم 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 استفاده کنید.

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