بررسی لاگین کاربر سایت با استفاده از WebForm

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

در این مقاله یک فرم ساده لاگین با استفاده از اعتبار سنجی کاربرهایی که در داخل پایگاه داده ثبت شده اند را با یک مثال توضیح خواهیم داد.

بررسی لاگین کاربر سایت با استفاده از WebForm

در اینجا بررسی میشود که کاربر لاگین کرده است یا خیر که در صورت لاگین نبودن به صفحه ی لاگین فرستاده میشود. و اگر کاربر بدون لاگین قصد دیدن صفحه ای را داشت باید اعتبار سنجی را در اینجا قرار دهیم.

پایگاه داده :

یک جدول به نام USERS در پایگاه ایجاد میکنیم.

این مثال شامل  صفحه (Login.aspx) که در این صفحه کاربر لاگین میکند و صفحه (Home.aspx) که اگر لاگین با موفقیت انجام شود به این صفحه redirect میشود.

صفحه Login :

در این صفحه اتفاق های زیر خواهد افتاد :

1- اعتبارسنجی کاربر با استفاده از نام کاربری و رمز ورود.

2-اطمینان از آن که کاربر حساب کاربری فعال دارد.

صفحه HTML :

این صفحه شامل کنترل های صفحه ی لاگین برای رویداد اعتبار سنجی میباشد.

 <form id="form1" runat="server">
<asp:Login ID = "Login1" runat = "server" OnAuthenticate= "ValidateUser"></asp:Login>
</form

NameSpace ها :

شما نیاز به وارد کردن NameSpace های زیر در داخل پروژه دارید :


using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Security;

Stored Procedure برای صحت اعتبار کاربر :

Stored Procedure برای این استفاده میشود که در ابتدا بررسی میکند که نام کاربری و رمز ورود به درستی وارد شده است یا خیر که در صورت درست بودن 1- را بازمیگرداند.

اگر نام کاربری و رمز ورود صحیح باشد اما حساب کاربری فعال نباشد 2- را بازمیگرداند.

اگر نام کاربری و رمز ورود صحیح باشد و حساب کاربری کاربر فعال باشد USERID کاربر را برمیگرداند.


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

اعتبارسنجی کاربر :

رویداد زیر هنگامی که دکمه login کلیک شود فراخوانی میشود.

در اینجا کاربر رمز ورود و نام کاربری خود را وارد میکند که داخل stored preocedure میشود که از آن مقدار هایی به این رویداد ارسال میشود که اگر :

1- بازگردد پیام  "نام کاربری و رمز ورود صحیح است"  نشان داده میشود.

2- بازگردد پیام "حساب کاربری فعال نیست"  نشان داده میشود.

که با استفاده از متد FormsAuthentication RedirectFromLoginPage کاربر را به صفحه Home میفرستد.


protected void ValidateUser(object sender, EventArgs e)
{
    int userId = 0;
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("Validate_User"))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Username", Login1.UserName);
            cmd.Parameters.AddWithValue("@Password", Login1.Password);
            cmd.Connection = con;
            con.Open();
            userId = Convert.ToInt32(cmd.ExecuteScalar());
            con.Close();
        }
        switch (userId)
        {
            case -1:
                Login1.FailureText = "Username and/or password is incorrect.";
                break;
            case -2:
                Login1.FailureText = "Account has not been activated.";
                break;
            default:
                FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
                break;
        }
    }
}

صفحه Home :

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

صفحه HTML :

این صفحه دارای یک کنترل برای نمایش دادن نام کاربر لاگین شده است.


<div>
    Welcome
    <asp:LoginName ID="LoginName1" runat="server" Font-Bold = "true" />
    <br />
    <br />
    <asp:LoginStatus ID="LoginStatus1" runat="server" />
</div>

شا نیاز به وارد کردن nameSpace زیر دارید :


using System.Web.Security;

فرستادن کاربر به صفحه لاگین در صورت لاگین نبودن :

در رویداد PageLoad با استفاده از خصوصیت IsAuthenticated بررسی میکنیم که کاربر لاگین شده است یا خیر. که اگر کاربر لاگین نبوده باشد به صفحه ی لاگین فرستاده میشود.


protected void Page_Load(object sender, EventArgs e)
{
    if (!this.Page.User.Identity.IsAuthenticated)
    {
        FormsAuthentication.RedirectToLoginPage();
    }
}

تنظیمات webConfig :

شما نیاز به وارد کردن کد زیر در <system.web> میباشید.


<authentication mode="Forms">
 <forms defaultUrl="~/Home.aspx" loginUrl="~/Login.aspx" slidingExpiration="true" timeout="2880"></forms>
</authentication>

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

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

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

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

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