موضوع :  سیستم ورود و تشخیص هویت ساده
خلاصه مطلب :   در این مقاله یک سیستم لوگین ساده رو به زبان vb و دیتابیس access توضیح دادم سایر بخش ها مانند نقش ها رو در بخش پیشرفته توضیح داده ام.

سیستم ورود و تشخیص هویت ساده (Login And Simple Authentication System)

اگر با سایت هایی که دارای بخش عضویت هستند کار کرده باشید اهمیت سیستم ورود و تشخیص هویت کاربر را به خوبی می دانید ، این سیستم هویت صحیح کاربر را تشخیص داده و مجوز استفاده از سامانه را تایید می کند

در صورتی که نام کاربری یا رمز عبور اشتباه باشد از ورود این کاربر جلوگیری خواهد شد.


برای شروع ابتدا باید یک جدول د دیتابیس اکسس بسازید که شامل دو تا ستون یکی برای username و یکی برای password باشد ، نام ستون اول رو uid و نام ستون دوم که را pwd میگذاریم همچنین uid را نیز primary key در نظر میگیریم .
خوب حالا این جدول رو به نام tbl_members ذخیره می کنیم .


یک پروژه در Visual Studio.NET با زبان Vb.NET ایجاد نمایید
دو فرم  به نا های Default.aspx  و Login.aspx ایجاد نمایید

اکنون وارد فایل وب کانفیگ ( web.config ) شوید ; دوستانی که از نسخه 2005 استفاده می کنند باید این فایل رو به پروژه اضافه کنند ( وارد منوی فایل و سپس از add new item شده و یک فایل webconfig اضافه کنید )
تنظیمات داخل وب کانفیگ به صورت زیر است ( کافیست محتویات داخل فایل Web.Config را کاملا پاک کرده و کد های زیر را جایگزین کنید )

<?xml version="1.0"?>
<configuration>
	<system.web>
		<customErrors mode="Off"/>

		<authentication mode="Forms">
			<forms name="MyAppCookie" loginUrl="Login.aspx" protection="All" timeout="30" defaultUrl="Default.aspx" ></forms>
		</authentication>

		<authorization>
			<deny users="?"/>
		</authorization>

	</system.web>
</configuration>


در بخش Authentication تنظیمات اصلی تشخیص هویت انجام شده است ، صفحه ورودی و صفحه اصلی همچنین زمان انقضای کوکی ست شده است

در بخش Authorizatioin تعیین شده که هیچ کاربر نا شناسی وارد سیستم نشود

اکنون به سراغ صفحه Login.aspx که همان صفحه ورود و تشخیص هویت می باشد می رویم ، ابتدا یک فرم ورود به شکل زیر ایجاد می کنیم :

یک TextBox برای وارد کردن نام کاربری با آیدی txt_uid بگذارید
یک TextBox برای رمز عبور با آیدی txt_pwd گذاشته و text mode را برابر password تعین کنید
یک CheckBox برای مرا بخاطر بسپار با ایدی chk_member قرار داده
و یک Label برای پیام های سیستم به نام lbl که  خاصیت Visible آن به صورت پیشفرض  false هست
و  یک Button هم برای ورود قرارد دهید و آیدی آن را btn_submit میگذاریم ، کد های Html در نهایت به شکل زیر خواهد بود 

        <table border="0" style="width: 100%; height: 504px">
            <tr>
                <td align="center" style="width: 100%">
                    <fieldset style="width: 296px; height: 112px" dir="rtl">
                        <legend dir="rtl">ورود به سایت</legend>
                        <table border="0">
                            <tr>
                                <td>
                                    نام کاربری :</td>
                                <td align="right">
                                    <asp:TextBox ID="txt_uid" runat="server" Width="144px"></asp:TextBox></td>
                                <td>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    رمز عبور :</td>
                                <td align="right">
                                    <asp:TextBox ID="txt_pwd" runat="server" TextMode="Password" Width="144px"></asp:TextBox></td>
                                <td>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="2">
                                    <asp:CheckBox ID="chk_member" runat="server" Text="مرابه خاطر بسپار" /></td>
                                <td>
                                </td>
                            </tr>
                            <tr>
                                <td colspan="3">
                                    <asp:Label ID="lbl" runat="server" ForeColor="Red" Text="نام کاربری یا رمز عبور نادرست می باشد"
                                        Visible="False"></asp:Label></td>
                            </tr>
                            <tr>
                                <td>
                                </td>
                                <td align="center">
                                    <asp:Button ID="btn_submit" runat="server" CssClass="button" Text="ورود" /></td>
                                <td>
                                </td>
                            </tr>
                        </table>
                    </fieldset>
                </td>
            </tr>
        </table>


حالا به سراغ بخش code-behind رفته و دو فضا نام زیر رو وارد نمایید

Imports System.Data
Imports System.Data.OleDb

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

        Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\login.mdb")
        Dim cmd As New OleDbCommand("select count(*) from tbl_members where uid=? and pwd=?", con)
        cmd.Parameters.AddWithValue("uid", txt_uid.Text)
        cmd.Parameters.AddWithValue("pwd", txt_pwd.Text)
        con.Open()
        If cmd.ExecuteScalar = 1 Then

            FormsAuthentication.RedirectFromLoginPage(txt_uid.Text, chk_member.Checked)

        ElseIf cmd.ExecuteScalar = 0 Then

            lbl.Visible = True

        End If

در کد های فوق ابتدا یک ارتباط از طریق رشته اتصال به بانک اکسس برقرار کرده و سپس توسط دستور Select تعداد رکوردهایی که نام کاربری و رمز عبور آن برابر مقادیر وارد شده توسط کاربر است را دریافت می کنیم ، اگر تعداد این رکورد ها 0 بود یعنی چنین کاربری در بانک موجود نیست و اگر 1 بود یعنی اطلاعات وارده صحیح بوده و کاربر موجود می باشد بنابراین اجازه دسترسی توسط متد FormsAuthentication.RedirectFromLoginPage  صادر می شود ، دقت کنید که پارامتر اول این متد نام کاربری است و پارامتر دوم یک Boolean است که تعیین می کند که سیستم کاربر را بخاطر بسپارد یا نه .

کار تمام است ، اکنون اگر صفحه Default.aspx را فراخوانی کنید سیستم به صورت خودکار شما را به صفحه لاگین هدایت کرده و پس از تشخیص هویت قادر به مشاهده این صفحه خواهید بود .

سوالات متداول :

1. علاوه بر صفحات فوق یک صفحه Register.aspx دارم ، می خواهم این صفحه نیازی به تشخیص هویت نداشته باشد و با فراخوانی توسط کاربر نمایش داده شود ، چه کاری باید انجام دهم ؟

جواب : برای اینکار از تگ Location بعد از System.Web استفاده می کنیم :

	<location path="Register.aspx">
		<system.web>

			<authorization>
				<allow users="*"/>
			</authorization>
		</system.web>
	</location>

در نهایت کد های وب کانفیگ به صورت زیر خواهد بود :

<?xml version="1.0"?>
<configuration>
	<system.web>
		<customErrors mode="Off"/>

		<authentication mode="Forms">
			<forms name="MyAppCookie" loginUrl="Login.aspx" protection="All" timeout="30" defaultUrl="Default.aspx" ></forms>
		</authentication>

		<authorization>
			<deny users="?"/>
		</authorization>

	</system.web>
	<location path="Register.aspx">
		<system.web>

			<authorization>
				<allow users="*"/>
			</authorization>
		</system.web>
	</location>
</configuration>

 

2. پس از ورود به صفحه چگونه نام کاربری که لاگین کرده است را استخراج کنم ؟

جواب : این کار به سادگی از طریق کد زیر امکان پذیر است :

User.Identity.Name

 

3. چطور می توانم از طریق کد نویسی در صفحات دیگر متوجه شوم که آیا کاربر لاگین کرده است یا خیر ؟

جواب : با استفاده از یک شرط ساده به صورت زیر :

        If User.Identity.IsAuthenticated Then


        Else


        End If

4. می خواهم یک دکمه خروج از سیستم قرار دهم تا کاربر با کلیک بر روی آن از سیستم خارج شود ، چطور این کار را انجام دهم :

جوب :  از طریق کد های زیر :

        FormsAuthentication.SignOut()
        FormsAuthentication.RedirectToLoginPage()

5. یک سیستم ورود و تشخیص هویت طراحی کرده ام که به خوبی کار می کند ، تنها مشکلی که هست این که سیستم به صورت خودکار هر چند ساعت یکبار کاربر را از SignOut می کند ، دلیل این امر چیست ؟

جواب : دلیل این اتفاق میزان timeout است که در وبکانفیگ تنظیم شده است ، این میزان را ما به صورت پیشفرض 30 دقیقه تعیین نمودیم ، شما می توانید آن را تغییر داده و افزایش دهید

	<authentication mode="Forms">
			<forms name="MyAppCookie" loginUrl="Login.aspx" protection="All" timeout="30" defaultUrl="Default.aspx" ></forms>
		</authentication>

مثلا 120 دقیقه :

	<authentication mode="Forms">
			<forms name="MyAppCookie" loginUrl="Login.aspx" protection="All" timeout="120" defaultUrl="Default.aspx" ></forms>
		</authentication>

 

فایل پروژه را از اینجا دانلود نمایید