آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

پیکربندی احراز هویت فرم‌ها

مرحله اول: آزمایش تنظیمات پیکربندی <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>

 

 

 

 

استفاده از کنترل‏های LoginView و LoginName

مایش متفاوت محتوی به کابران شناسایی شده و ناشناس لازم است؛ از این رو، نام کاربر جاری وارد شده نمایش داده می‏شود. بدان منظور،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>

TODO: Menu will go here...

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

با افزودن این کدها در تمام صفحات نام شخصی که شناسایی شده است، نمایش داده می‏شود.