ایجاد Login Page ساده در ASP.Net MVC

پنجشنبه 11 آذر 1395

در این مقاله ، ما یک Login Form ساده در ASP.Net MVC ایجاد خواهیم کرد . اطلاعات کاربر را اعتبارسنجی خواهیم کرد و اعمالی که کاربر باید انجام دهد را به او اعلام میکنیم . در ادامه ی این مقاله ، ایجاد یک صفحه Login را به صورت مرحله به مرحله بررسی خواهیم کرد .

ایجاد Login Page ساده در ASP.Net MVC

صفحه Login یکی از اساسی ترین نیاز های هر برنامه ای میباشد . اطلاعات کاربر قبل از انجام هر کاری در سیستم نیاز به اعتبارسنجی دارند . 

یک پایگاه داده با نام ConsumerBanking ایجاد کنید. یک جدول با نام CBLoginInfo در آن ایجاد کنید . 

create database ConsumerBanking  
  
 go  
  
USE [ConsumerBanking]  
GO  
  
/****** Object:  Table [dbo].[CBLoginInfo]    Script Date: 8/7/2016 10:06:47 PM ******/  
SET ANSI_NULLS ON  
GO  
  
SET QUOTED_IDENTIFIER ON  
GO  
  
CREATE TABLE [dbo].[CBLoginInfo](  
    [CustomerId] [int] NOT NULL,  
    [UserName] [nvarchar](20) NULL,  
    [Password] [nvarchar](20) NULL,  
    [LastLoginDate] [datetime] NULL,  
    [LoginFailedCount] [int] NULL,  
    [LoginIPAddress] [nvarchar](20) NULL,  
    [CustomerTimeZone] [nvarchar](20) NULL,  
    [LastAccessedDate] [datetime] NULL,  
    [AccountLocked] [bit] NULL,  
 CONSTRAINT [PK_CBLogin1] PRIMARY KEY CLUSTERED   
(  
    [CustomerId] ASC  
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]  
) ON [PRIMARY]  
  
GO 


توجه داشته باشید که Password در هیچ برنامه ای بصورت Plain Text ذخیره نخواهد شد . بهتر است که آن را کدگذاری کنید ، در این صورت هیچ کسی نمیتواند آن ها را بخواند ، اما چون هدف این مقاله آموزشی است ، ما در اینجا Password را بصورت Plain Text ذخیره خواهیم کرد . 

زمانی که چند رکورد وارد پایگاه داده SQL Server کردیم ، برای واکشی اطلاعات کاربر و اعتبارسنجی انها ، ما یک Store Procedure خواهیم نوشت . نام این Store Procedure را GetCBLoginInfo بگذارید . 

در اینجا منطق های برنامه را تعریف میکنیم ، منطق هایی که در هر صفحه Login ای مورد نیاز است :

• اگر Username و Password معتبر است ، login موفق بوده است و کاربر را به صفحه مشخص شده هدایت کن . 
• اگر Username و Password در پایگاه داده وجود ندارد ، یک پیام خطا با مضمون " کاربری با این مشخصات وجود ندارد " را به کاربر نشان دهد  .
• اگر Username وارد شده معتبر است ، اما Password وارد شده نا معتبر است ، تعداد دفعات تلاش های ناموفق کاربر را نشان بده .
• اگر تلاش ناموفق کاربر بیش از 5 بار بود ، این کاربر را lock کن . 

USE [ConsumerBanking ]
GO
/****** Object:  StoredProcedure [dbo].[GetCBLoginInfo]    Script Date: 07/09/1395 10:55:58 ق.ظ ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
  
ALTER  PROCEDURE [dbo].[GetCBLoginInfo]  
    @UserName VARCHAR(20),  
    @Password varchar(20)  
AS  
SET NOCOUNT ON  
Declare @Failedcount AS INT  
SET @Failedcount = (SELECT LoginFailedCount from CBLoginInfo WHERE UserName = @UserName)  
  
IF EXISTS(SELECT * FROM CBLoginInfo WHERE UserName = @UserName)  
  
 BEGIN  
  
 IF EXISTS(SELECT * FROM CBLoginInfo WHERE UserName = @UserName AND Password = @Password )  
    SELECT 'با موفقیت وارد شدید' AS UserExists  
ELSE  
  
Update CBLoginInfo set  LoginFailedCount = @Failedcount+1  WHERE UserName = @UserName  
  
Update CBLoginInfo set LastLoginDate=GETDATE()  WHERE UserName = @UserName  
 BEGIN  
IF @Failedcount >=5  
  
  
SELECT 'تعداد تلاش های ناموفق شما بیش از پنج بار شده است . شما مجاز به تلاش دوباره نیستید ' AS UserExists  
ELSE  
  
select CONVERT(varchar(10), (SELECT LoginFailedCount from CBLoginInfo   WHERE UserName = @UserName))   AS UserFailedcount  
END   
END  
 ELSE  
  
 BEGIN   
  
SELECT 'کاربری با این مشخصات یافت نشد ' AS UserExists  
 END 

حال ما Store Procedure را نیز ایجاد کردیم و کار ما در قسمت پایگاه داده به اتمام رسیده است . 

حال ، برای ایجاد صفحه Login ما یک برنامه وب ASP.Net MVC ایجاد خواهیم کرد . و ما Store Procedure را فراخوانی خواهیم کرد از Entity Framework برای اعتبارسنجی اطلاعات کاربر ، استفاده خواهیم کرد .

یک پروژه جدید ایجاد کرده و ASP.Net Web Application را انتخاب کنید و Ok را بزنید . 




 MVC را انتخاب کنید و Ok را بزنید . 




هم اکنون پروژه MVC ساخته شده است . 

ما از Entity Framework به عنوان لایه بازیابی کننده اطلاعات استفاده خواهیم کرد . یک فایل EDMX برای بازیابی اطلاعات از پایگاه داده به پروژه اضافه خواهیم کرد ، و Store Procedure ای را که پیش تر ایجاد کردیم را فراخوانی میکنیم . 



گزینه Generate from database را انتخاب کنید . 



در مرحله بعد ، پایگاه داده خود را انتخاب کنید .



در مرحله بعد Store Procedure خود را انتخاب کنید .



روی Finish کلیک کنید . حال ، ADO.Net Entity Data Model برای شما ساخته شده است . 



ما یک کلاس Model جدید با نام  CBUserModel ایجاد میکنیم ، که دارای دو مشخصه با نام Username و Password میباشد . این کلاس Model برای ارتباط مابین View و Controller مورد استفاده قرار خواهد گرفت . ما یکسری اعتبارسنجی های ابتدایی را نیز انجام میدهیم که این فیلد ها Empty نباشد . از فضانام System.ComponentModel.DataAnnotations نیز برای استفاده از DataAnnotationها استفاده میکنیم .


using System.ComponentModel.DataAnnotations;

namespace CBLogin.Models
{
    public class CBUserModel
    {
        [Required(ErrorMessage = " وارد کردن نام کاربری اجباریست ")]
        public string UserName { get; set; }
        [Required(ErrorMessage = " وارد کردن پسورد اجباریست ")]
        [DataType(DataType.Password)]
        public string Password { get; set; }
    }
}


ما یک Controller با نام CBLoginController ایجاد خواهیم کرد ، که دارای Action زیر میباشد :

Index View به ما Index را نمایش خواهد داد :

public ActionResult Index()  
      {  
          return View();  
      } 

زمانی که کاربر بعد از پر کردن فیلد های Username و Password ، این اطلاعات را ارسال کند ، این Index Action با [HttpPost] فراخوانی خواهد شد . در این Username ، Action و Password اعتبارسنجی خواهند شد . 

[HttpPost]  
public ActionResult Index(CBUserModel model)  
{  
    ConsumerBankingEntities cbe = new ConsumerBankingEntities();  
    var s = cbe.GetCBLoginInfo(model.UserName, model.Password);  
  
    var item = s.FirstOrDefault();  
    if (item == "Success")  
    {  
  
        return View("UserLandingView");  
    }  
    else if(item=="User Does not Exists")  
  
    {  
        ViewBag.NotValidUser = item;  
  
    }  
    else  
    {  
        ViewBag.Failedcount = item;  
    }  
  
  return View("Index");  
}  

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

public ActionResult UserLandingView()  
    {  
        return View();  
    } 

زمانی که یک کاربر index action را بارگذاری میکند ، index view نمایش داده خواهد شد و زمانی که کاربر اطلاعات را وارد و آنها را ارسال میکند ، در این زمان Index Action با [HttpPost] فراخوانی می شود . 

Entity Framwork نام کاربری و رمز را اعتبار سنجی میکند و با توجه به Store Procedure در صورت لزوم  پیام های خطایی را به کاربر نمایش میدهد و یا کاربر را به صفحه مشخص شده هدایت میکند . 

ما وضعیت های زیر را خواهیم داشت :

وضعیت 1 : اگر نام کاربری و رمز خالی باشد ، وضعیتی همانند تصویر زیر خواهیم داشت :


وضعیت دوم : 
اگر Username و Password ای که کاربر وارد میکند ، در پایگاه داده موجود نباشد .


وضعیت 3 : زمانی که نام کاربری و رمزی که کاربر وارد میکند ، معتبر باشد ، کاربر به صفحه مقصد هدایت خواهد شد :

وضعیت 5 : زمانی که نام کاربری و رمز اشتباه داده شود ، تعداد دفعاتی که اطلاعات اشتباه وارد شده است به کاربر نمایش داده میشود . 



وضعیت 4 : 
اگر نام کاربری و رمزی که کاربر وارد میکند ، بیش از 5 بار اشتباه وارد شود ، کاربر lock میشود ، همانند تصویر زیر :

آموزش asp.net mvc

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید