مرحله اول: آزمایش تنظیمات پیکربندی <Forms>
سیستم احراز هویت فرمها درASP.NET تعدادی تنظیمات پیکربندی ارائه میدهد که میتواند بر پایه برنامهنویسی انجام شود. شامل تنظیماتی مانند: چرخه حیات برچسب احراز هویت فرمها، چه میزان امنیت به برچسب اعمال شود، تحت چه شرایطی برچسب احراز هویت بدون کوکی استفاده شود، نشانی صفحه ورود و اطلاعات دیگر. برای تغییر مقادیر پیش فرض، یک عنصر <forms> به عنوان فرزند عنصر <authentication> اضافه کرده و مقادیر مشخصههایی که میخواهید را در قالب XML تغییر دهید، مانند:
<authentication mode="Forms">
<forms
propertyName1="value1"
propertyName2="value2"
...
propertyNameN="valueN"
/>
</authentication>
در جدول زیر خلاصهای از مشخصاتی که میتوان در عنصر <forms> به دلخواه تغییر داد، آورده شده است. از آنجایی که web.config یک فایل XML است، مشخصهها به کوچک و بزرگی حروف حساس هستند.
نشانه (Attribute) | توصیف (Description) |
Cookieless | این نشانه مشخص میکند تحت چه شرایطی برچسب احراز هویت در کوکی ذخیره شود و یا اینکه در URL درج گردد. مقادیر مجاز این نشانه عبارتند از: UseCookiess; UseUri; AutoDetect; UseDeviceProfile (Default) |
defaultUrl | اگر مقدار RedirectUrl در رشته پرس و جو مشخص نشده باشد، نشانی که کاربر بعد از وارد شدن به سایت از طریق صفحه ورود به آن هدایت میشود در این مشخصه نگهداری میشود. |
Domain | وقتی از برچسب احراز هویت بر پایه کوکی استفاده میکنید این نشانه، نشانی کوکی را مشخص میکند. مقدار پیش فرض یک مقدار تهی است و بستگی دارد به اینکه مرورگر شما چه نشانی را نشان میدهد؛ مانند www.yourdomain.com. در این حالت وقتی درخواست subdomain ارسال میشود، کوکی ارسال نمیگردد. اگر میخواهید در subdomainها هم کوکی ارسال شود باید نشانی را به صورت yourdomain.com بنویسید. |
enableCrossAppRedirects | یک مقدار بولی است که تعیین میکند که اگر کاربر شناسایی شده بخواهد، در حالت شناسایی بماند هنگامی که به یک نشانی وب دیگری در همان سرور میرود. مقدار این به طور پیش فرض false است. |
loginUrl | نشانی صفحه ورود. مقدار پیش فرض آن login.aspx |
Name | نام کوکی است، هنگامی که از برچسب احراز هویت بر پایه کوکی استفاده میکنید. مقدار پیش فرض آن .ASPXAUTH |
Path | هنگامی که از برچسب احراز هویت بر پایه کوکی استفاده میکنید، این نشانه نشانی کوکی را مشخص میکند. |
Protection | مشخص میکند از چه روشی برای محافظت از برچسب احراز هویت فرمها استفاده شود. مقادیر مجاز عبارتند از: All (Default); Encription; None; Validation |
requireSSL | یک مقدار بولی که مشخص میکند یک ارتباط SSL برای ارسال کوکی نیاز دارد. مقدار پیش فرض false است. |
slidingExpiration | یک مقدار بولی که مشخص میکند در هر بازدید کاربر از سایت در طول یک جلسه، زمان پایان کوکی از ابتدا شروع شود. مقدار پیش فرض آن false است. |
Timeout | زمانی که طول میکشد تا کوکی برچسب احراز هویت منقضی شود را مشخص میکند (به دقیقه). مقدار پیش فرض 30 است. |
علاوه بر متدهایی برای ورود کاربر، کلاس FormsAuthentication یک متد SignOut نیز فراهم میکند. متد SignOut به راحتی برچسب احراز هویت فرمها را خراب میکند و باعث خروج کاربر از سایت میشود.
کنترل LoginStatus بسته به وضعیت شناسایی کاربر یکی از این دو پیوند را نمایش میدهد: ورود و یا خروج. کلیک کردن بر روی پیوند ورود، باعث هدایت کاربر به صفحه ورود میشود. کلیک کردن پیوند خروج باعث میشود کنترل LoginStatus متد FormsAuthentication.SignOff را فراخوانی کرده و سپس کاربر را به یک صفحه هدایت کند. صفحهای که کاربر خارج شده به آن هدایت میشود به مشخصه LogoutAction بستگی دارد، که میتواند یکی از سه مقدار زیر را داشته باشد:
· Refresh: پیش فرض؛ کاربر را به صفحهای که در حال دیدن آن بوده هدایت میکند. اگر کاربر ناشناس اجازه دیدن آن صفحه را نداشته باشد، FormsAuthenticationModule به طور خودکار کاربر را به صفحه ورود هدایت میکند.
· Redirect: کاربر به صفحهای که در مشخصه LogoutPageUrl کنترل LoginStatus مشخص شده هدایت میشود.
· RedirectToLoginPage: کاربر به صفحه ورود هدایت میشود.
اجازه دهید یک کنترل LoginStatus به مسترپیج اضافه کنیم و آن را با استفاده از گزینه Redirect پیکربندی نموده، به طوری که کاربر به صفحهای که پیامی مبنی بر تایید خروج کاربر نمایش میدهد؛ فرستاده شود. یک صفحه جدید به ریشه اضافه کرده و نام آن را Logout.aspx بگذارید. یادتان باشد که مسترپیج به آن اعمال شود. در صفحه جدید متنی مبنی بر تایید خروج کاربر بنویسید.
سپس در صفحه مسترپیج یک کنترل LoginStatus در زیر کنترل LoginView در داخل LoginContent اضافه کنید. در پایان باید کدهای صفحه به صورت زیر باشد:
<div id="navigation">
<asp:ContentPlaceHolder ID="LoginContent" runat="server">
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Welcome back,
<asp:LoginName ID="LoginName1" runat="server" />
</LoggedInTemplate>
<AnonymousTemplate>
Hello, stranger.
<asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="~/Login.aspx">Log In</asp:HyperLink>
</AnonymousTemplate>
</asp:LoginView>
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Logout.aspx" />
<br /><br />
</asp:ContentPlaceHolder>
TODO: Menu will go here...
</div>
مایش متفاوت محتوی به کابران شناسایی شده و ناشناس لازم است؛ از این رو، نام کاربر جاری وارد شده نمایش داده میشود. بدان منظور،ASP.NET دارای دو کنترل وب است که بدون نوشتن حتی یک خط کد این کار را انجام میدهند. کنترل LoginView یک کنترل وب بر اساس قالب است که نشان دادن دادههای متفاوت به کاربران شناسایی شده و ناشناس را آسان میکند. LoginView دارای دو قالب از پیش تعریف شده است:
· AnonymousTemplate: هرگونه تغییر در این قالب به کاربر ناشناس نمایش داده می شود.
· LoggedInTemplate: این قالب به کاربر شناسایی شده نمایش داده میشود.
حالا باید کنترل LoginView را به Site.master اضافه کنیم. اجازه دهید به جای اینکه فقط کنترل LoginView را اضافه کنیم، ابتدا یک کنترل ContentPlaceHolder اضافه کرده و سپس کنترل LoginView را درون آن قرار دهیم. کدهای زیر را در محل مناسب (بالای TODO: Menu will go here...) قرار دهید:
<div id="navigation">
<asp:ContentPlaceHolder ID="LoginContent" runat="server">
</asp:ContentPlaceHolder>
</div>
سپس یک کنترل LoginView به LoginContent اضافه کنید. مطالب قرار داده شده در کنترلهای ContentPalseHolder مسترپیچ به عنوان مطالب پیش فرض برای ContentPalseHolder در نظر گرفته میشوند. آن به این معنی است که صفحاتASP.NET که از مسترپیج استفاده میکنند میتوانند مطالب خودشان را برای هر ContentPalseHolder مشخص کنند و یا از مطالب پیش فرض مسترپیج استفاده کنند.

حالا باید کدهای شما به صورت زیر تغییر یافته باشد:
<div id="navigation">
<asp:ContentPlaceHolder ID="LoginContent" runat="server">
<asp:LoginView ID="LoginView1" runat="server">
</asp:LoginView>
<br /><br />
</asp:ContentPlaceHolder>
TODO: Menu will go here...
</div>
قالبهای LoginView میتواند در قسمت Design تعریف شوند. در قسمت Designerزبانه هوشمند کنترل LoginView را باز کنید. در AnonymousTemplate متن "Hello, stranger" را بنویسید؛ سپس یک کنترل HyperLink اضافه کرده و مشخصات Text و NavigateUrl آن را به ترتیب برابر "Log In" و "~/Login.aspx" قرار دهید.
پس از اینکه AnonymousTemplate را پیکربندی کردید به LoggedInTemplate بروید و متن "Welcome back," را در آن بنویسید. سپس یک کنترل LoginName از جعبه ابزار گرفته و به کنار متن بکشید.
حالا باید کدهای شما به صورت تغییر یافته باشد:
<div id="navigation">
<asp:ContentPlaceHolder ID="LoginContent" runat="server">
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Welcome back,
<asp:LoginName ID="LoginName1" runat="server" />
</LoggedInTemplate>
<AnonymousTemplate>
Hello, stranger.
<asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="~/Login.aspx">
Log In
</asp:HyperLink>
</AnonymousTemplate>
</asp:LoginView>
<br /><br />
</asp:ContentPlaceHolder>
TODO: Menu will go here...
</div>
با افزودن این کدها در تمام صفحات نام شخصی که شناسایی شده است، نمایش داده میشود.