国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP.net Membership角色與權限管理

2019-11-17 04:01:29
字體:
來源:轉載
供稿:網友
本文目錄:
1.membership簡介
2.membership在sql server中的設置
3.配置web.config
4.創建用戶CreateUserWizard控件
5.用戶登錄login控件
6.顯示當前用戶的名稱LoginName控件
7.檢測用戶的身份驗證狀態的LoginStatus控件
8.為不同類別用戶呈現不同內容的LoginView控件
9.更改密碼的ChangePassWord控件
10.自助找回密碼的PasswordRecovery控件
11.總結

1.membership簡介

membership,真的很有趣,很方便,很有用。介紹給大家。

asp.net 應用程序中,Membership 類用于驗證用戶憑據并管理用戶設置(如密碼和電子郵件地址)。Membership 類可以獨自使用,或者與 FormsAuthentication 一起使用,以創建一個完整的 Web 應用程序或網站的用戶身份驗證系統。Login 控件封裝了 Membership 類,從而提供一種便捷的用戶驗證機制。

Membership 類提供的功能可用于:
1)創建新用戶。
2)將成員資格信息(用戶名、密碼、電子郵件地址及支持數據)存儲在 Microsoft SQL Server 或其他類似的數據存儲區。
3)對訪問網站的用戶進行身份驗證。可以以編程方式對用戶進行身份驗證,也可以使用 Login 控件創建一個只需很少代碼或無需代碼的完整的身份驗證系統。
4)管理密碼。包括創建、更改、檢索和重置密碼等等。可以選擇配置 ASP.NET 成員資格以要求一個密碼提示問題及其答案來對忘記密碼的用戶的密碼重置和檢索請求進行身份驗證。
默認情況下,ASP.NET 成員資格可支持所有 ASP.NET 應用程序。默認成員資格提供程序為 SqlMembershipPRovider 并在計算機配置中以名稱 AspNetSqlProvider 指定。SqlMembershipProvider 的默認實例配置為連接到 Microsoft SQL Server 的一個本地實例。

2.membership在sql server中的設置

要使用membership,需要對數據庫進行一些設置,使用過membership的朋友知道,數據庫中有一些固有的表、視圖和存儲過程,我們自己的表中沒有這些東西。不過,我們可以通過向導來創建它們,那就是aspnet_regsql.exe,一般來說它位于:C:/WINDOWS /Microsoft.NET/Framework/v2.0.50727(我的就在這里)

它既可以創建數據庫中的選項,也可以移除這些設置。

在運行這個程序之前,我在sql server2005中建立了一個空的數據庫:membershipdemo。建立membershipdemo后,我們運行aspnet_regsql.exe,指定membership為membershipdemo。


完成之后,空空的數據庫就有很多內容了,不過具體的內容暫時不必管。繼續后面的內容。



3.配置web.config

web.config也是要修改的。在system.web節點下添加authentication節點。

membership既然是用于成員資格管理,當然要求登錄驗證身份,所以首先加上一個forms驗證。

<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".aspxlogin"/>
</authentication>

同樣在system.web節點下添加membership節點。


<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear/>
<add connectionStringName="ConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
屬性解釋說明:

defaultProvider :提供程序的名稱。默認為 AspNetSqlMembershipProvider。如果你有多個Provider的話,指定一個默認值是明智的做法
userIsOnlineTimeWindow :指定用戶在最近一次活動的日期/時間戳之后被視為聯機的分鐘數。
hashAlgorithmType :用于哈希密碼的算法的標識符,或為空以使用默認哈希算法。connectionStringName :membership數據庫的連接名稱。
enablePasswordRetrieval :指示當前成員資格提供程序是否配置為允許用戶檢索其密碼。
enablePasswordReset :指示當前成員資格提供程序是否配置為允許用戶重置其密碼。
requiresQuestionAndAnswer :指示默認成員資格提供程序是否要求用戶在進行密碼重置和檢索時回答密碼提示問題。
applicationName :應用程序的名稱。
requiresUniqueEmail :指示成員資格提供程序是否配置為要求每個用戶名具有唯一的電子郵件地址。
passwordFormat :指示在成員資格數據存儲區中存儲密碼的格式。值可選Clear、Encrypted 和 Hashed。Clear 密碼以明文形式存儲,這可以提高存儲和檢索密碼的性能,但安全性較差,當數據源安全性受到威脅時此類密碼很容易被讀取。Encrypted 密碼在存儲時進行了加密,可以在比較或檢索密碼時進行解密。此類密碼在存儲和檢索時需要進行額外的處理,但比較安全,在數據源的安全性受到威脅時不容易被獲取。Hashed 密碼在存儲到數據庫時使用單向哈希算法和隨機生成的 salt 值進行哈希處理。在驗證某一密碼時,將用數據庫中的 salt 值對該密碼進行哈希計算以進行驗證。無法檢索哈希密碼。
maxInvalidPasswordAttempts :鎖定成員資格用戶前允許的無效密碼或無效密碼提示問題答案嘗試次數。
minRequiredPasswordLength :密碼所要求的最小長度。
minRequiredNonalphanumericCharacters :有效密碼中必須包含的最少特殊字符數。
passwordAttemptWindow :在鎖定成員資格用戶之前允許的最大無效密碼或無效密碼提示問題答案嘗試次數的分鐘數。這是為了 防止不明來源反復嘗試來猜測成員資格用戶的密碼或密碼提示問題答案的額外措施。
passwordStrengthRegularExpression :計算密碼的正則表達式。

為membership配置web.config后,再配置其角色管理roleManager,也是在system.web下。

<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="ConnectionString" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
屬性解釋說明:
cacheRolesInCookie :指示當前用戶的角色是否已緩存在某個 Cookie 中。
當 CacheRolesInCookie 屬性在配置文件中設置為 true 時,每個用戶的角色信息就會存儲在客戶端上的某個 Cookie 中。當角色管理檢查確定某個用戶是否屬于某個特定角色時,在調用角色提供程序在數據源中檢查角色列表之前,將先檢查角色 Cookie。該 Cookie 在客戶端上會動態更新以緩存最近已驗證的角色名稱。
web.config就配置差不多了。

真正步入正題。

4.創建用戶CreateUserWizard控件

在vs2005中創建一個aspx頁面,取名CreateUserWizard.aspx。直接從toolbox中拖入一個 CreateUserWizard控件,設置一下FinishDestinationPageUrl屬性,該屬性指示用戶創建完成后,用戶點擊“繼續”后定向的頁面。

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ContinueDestinationPageUrl="~/Default.aspx">
</asp:CreateUserWizard>

現在不做任何設置,在vs2005的中design視圖中可以看到



測試一下先!



提交,出現下面結果:



所以,正確設置membership后,注冊用戶就立馬可以使用了。這是CreateUserWizard的默認模板,你也可以自己創建你需要的模板,vs2005可以幫你轉換出來。你可以修改一下,轉換后就是這樣。

<asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email"
                                ErrorMessage="必須填寫“電子郵件”。" ToolTip="必須填寫“電子郵件”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="QuestionLabel" runat="server" AssociatedControlID="Question">安全提示問題:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="Question" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="QuestionRequired" runat="server" ControlToValidate="Question"
                                ErrorMessage="必須填寫“安全提示問題”。" ToolTip="必須填寫“安全提示問題”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="AnswerLabel" runat="server" AssociatedControlID="Answer">安全答案:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="Answer" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="AnswerRequired" runat="server" ControlToValidate="Answer"
                                ErrorMessage="必須填寫“安全答案”。" ToolTip="必須填寫“安全答案”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2">
                            <asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password"
                                ControlToValidate="ConfirmPassword" Display="Dynamic" ErrorMessage="“密碼”和“確認密碼”必須匹配。"
                                ValidationGroup="CreateUserWizard1"></asp:CompareValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2" style="color: red">
                            <asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal>
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
            <CustomNavigationTemplate>
                <table border="0" cellspacing="5" style="width: 100%; height: 100%;">
                    <tr align="right">
                        <td align="right" colspan="0">
                            <asp:Button ID="StepNextButton" runat="server" CommandName="MoveNext" Text="創建用戶"
                                ValidationGroup="CreateUserWizard1" />
                        </td>
                    </tr>
                </table>
            </CustomNavigationTemplate>
        </asp:CreateUserWizardStep>
        <asp:CompleteWizardStep runat="server">
            <ContentTemplate>
                <table border="0">
                    <tr>
                        <td align="center" colspan="2">
                            完成</td>
                    </tr>
                    <tr>
                        <td>
                            已成功創建您的帳戶。</td>
                    </tr>
                    <tr>
                        <td align="right" colspan="2">
                            <asp:Button ID="ContinueButton" runat="server" CausesValidation="False" CommandName="Continue"
                                Text="繼續" ValidationGroup="CreateUserWizard1" />
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:CompleteWizardStep>
    </WizardSteps>
    <StartNavigationTemplate>
        <asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="下一步" />
    </StartNavigationTemplate>
    <FinishNavigationTemplate>
        <asp:Button ID="FinishPreviousButton" runat="server" CausesValidation="False" CommandName="MovePrevious"
            Text="上一步" />
        <asp:Button ID="FinishButton" runat="server" CommandName="MoveComplete" Text="完成" />
    </FinishNavigationTemplate>
    <StepNavigationTemplate>
        <asp:Button ID="StepPreviousButton" runat="server" CausesValidation="False" CommandName="MovePrevious"
            Text="上一步" />
        <asp:Button ID="StepNextButton" runat="server" CommandName="MoveNext" Text="下一步" />
    </StepNavigationTemplate>
</asp:CreateUserWizard>

5.用戶登錄login控件

CreateUserWizard 可以直接拖出來用,login 控件也是一樣。在頁面中放入一個login,代碼很簡單。

<asp:Login ID="Login1" runat="server" DestinationPageUrl="~/admin/Default.aspx" PasswordRecoveryText="找回密碼" PasswordRecoveryUrl="PasswordRecovery.aspx">
</asp:Login>

屬性解釋:
DestinationPageUrl:設置在登錄嘗試成功時向用戶顯示的頁面的 URL。
PasswordRecoveryText:設置密碼恢復頁鏈接的文本。
PasswordRecoveryUrl:設置密碼恢復頁的 URL。 如果用戶忘記密碼,可以點擊這個鏈接點找回他的密碼。

同樣,你也可以自寫模板。

<asp:Login ID="Login1" runat="server" DestinationPageUrl="~/admin/Default.aspx" PasswordRecoveryText="找回密碼" PasswordRecoveryUrl="PasswordRecovery.aspx">
    <LayoutTemplate>
        <table border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse">
            <tr>
                <td>
                    <table border="0" cellpadding="0">
                        <tr>
                            <td align="center" colspan="2">
                                登錄</td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">用戶名:</asp:Label></td>
                            <td>
                                <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                    ErrorMessage="必須填寫“用戶名”。" ToolTip="必須填寫“用戶名”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">密碼:</asp:Label></td>
                            <td>
                                <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                    ErrorMessage="必須填寫“密碼”。" ToolTip="必須填寫“密碼”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:CheckBox ID="RememberMe" runat="server" Text="下次記住我。" />
                            </td>
                        </tr>
                        <tr>
                            <td align="center" colspan="2" style="color: red">
                                <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
                            </td>
                        </tr>
                        <tr>
                            <td align="right" colspan="2">
                                <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="登錄" ValidationGroup="Login1" />
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:HyperLink ID="PasswordRecoveryLink" runat="server" NavigateUrl="PasswordRecovery.aspx">找回密碼</asp:HyperLink>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </LayoutTemplate>
</asp:Login>


這次先不忙測試。等一下后面的控件!

6.顯示當前用戶的名稱LoginName控件

這個控件很簡單,就是用來呈現用戶名的。

<asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:注冊用戶" />
如果當前登錄的是blueidea,那么顯示的就是“您好,blueidea,您目前的身份是:注冊用戶”。

7.檢測用戶的身份驗證狀態的LoginStatus控件

可以說是最簡單的控件了。

<asp:LoginStatus ID="LoginStatus1" runat="server" />
它包含兩種狀態:1)已登錄到網站。2)已從網站注銷。
當用戶注銷后,會給出一個“登錄”的鏈接,用戶可以點擊這個鏈接來登錄;當用戶登錄后,這個控件會自動轉變為“注銷”狀態。

8.為不同類別用戶呈現不同內容的LoginView控件

全部登錄控件都可以直接拿來用,不過,這一個我們來做更多一些東西。

<asp:LoginView ID="LoginView1" runat="server">
                <LoggedInTemplate>
                    <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您已經登錄了。" />
                </LoggedInTemplate>
                <AnonymousTemplate>
                    <asp:Label ID="Label2" runat="server" Text="您尚未登錄,請"></asp:Label><asp:LoginStatus
                        ID="LoginStatus1" runat="server" />
                </AnonymousTemplate>
                <RoleGroups>
                    <asp:RoleGroup Roles="admin">
                        <ContentTemplate>
                            <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:管理員" />
                            <br />
                            您可以訪問:<asp:HyperLink ID="HyperLink1" NavigateUrl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
                            <br />
                            您也可以訪問:<asp:HyperLink ID="HyperLink2" NavigateUrl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
                            <br />
                            <asp:LoginStatus ID="LoginStatus3" runat="server" />
                        </ContentTemplate>
                    </asp:RoleGroup>
                    <asp:RoleGroup Roles="member">
                        <ContentTemplate>
                            <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:注冊用戶" />
                            <br />
                            您可以訪問<asp:HyperLink ID="HyperLink1" NavigateUrl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
                            <br />
                            您不能訪問<asp:HyperLink ID="HyperLink2" NavigateUrl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
                            <br />
                            <asp:LoginStatus ID="LoginStatus2" runat="server" />
                        </ContentTemplate>
                    </asp:RoleGroup>
                </RoleGroups>
            </asp:LoginView>

可以看到,這里包含了三個模板:LoggedInTemplate、AnonymousTemplate和RoleGroup的模板。如果定義了 LoggedInTemplate模板,那么該用戶會看到該模板內的內容,除非該用戶屬于另一個角色組,且該角色組在已在RoleGroups的模板中的定義。當匿名用戶訪問站點時,AnonymousTemplate內的內容會呈現給該用戶。在前面我們配置的web.config中啟用了角色,我們現在為admin角色定義一個模板,你可以在上面的代碼中找到。

到現在,我們就可以測試一下效果了。



可以看到,我們還沒有登錄,AnonymousTemplate的內容呈現在我們的面前。而且其中的LoginStatus顯示的狀態是“登錄”狀態。我們登錄一下,前面注冊了一個用戶,登錄一下。



LoggedInTemplate沒有起作用,而是member的角色模板起作用,這是因為,其實我們在CreateUserWizard做了設置,新用戶注冊以后直接納入member角色組了。在CreateUserWizard的CreatedUser事件中添加一句簡單的話:

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
Roles.AddUserToRole(CreateUserWizard1.UserName, "member");
}

再來解釋一下上面的的“你可以訪問……”是什么意思。在此之前我其實已經添加了兩個角色:member和admin。角色添加方法很簡單:在vs2005 中選擇 網站->ASP.NET配置->安全->創建或管理角色。跟上面的的配合,我們添加一個角色叫“admin”。



再選擇“創建訪問規則”來創建訪問規則。給admin文件創建下面規則,如圖示:



拒絕member組和匿名用戶,只允許admin組的用戶訪問admin文件夾。給user文件夾創建如下訪問規則。



拒絕匿名用戶,允許member組和admin組的用戶。

當新注冊用戶登錄后,它們可以訪問到user文件夾下的文件



但是,如果訪問admin文件夾時則會被定向到登錄頁。




9.更改密碼的ChangePassword控件

如果更改密碼,就使用它來修改。

<asp:ChangePassword ID="ChangePassword1" runat="server">
</asp:ChangePassword>
不需要設置,就可以修改密碼了。



10.自助找回密碼的PasswordRecovery控件

忘了密碼怎么辦,可以自已找回啦!不過,在些之前,web.config得另有配置。在system.web中的同級節點創建system.net節點,具體內容如下:

<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="*@126.com">
<network defaultCredentials="false" host="smtp.126.com" password="*" port="25" userName="*@126.com" />
</smtp>
</mailSettings>
</system.net>
我們使用了126的郵箱,其中的用戶名與密碼被省略。創建PasswordRecovery.aspx,放入PasswordRecovery控件。

<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
</asp:PasswordRecovery>

測試:




打開注冊時填寫的郵箱就可以看到了。



我們就可以使用新的密碼來登錄站點了。

11.總結

membership在接觸之前,覺得比較神秘,在接觸之后,發現其實也不難懂,而且與login系列控件配合得很完美。如果你想要快速搭建一個用戶管理的平臺,這是一個不錯的選擇,是偷懶者的首選。

如果你嫌MS的控件太難看,也沒有關系,因為它又有多種多樣的模板,通過自定義模板你就能實現你要看的界面。

不過,membership是設計得適合大多數的情況,所以也是一種萬金油的做法,與你要的功能可能不完全符合,不過,學習一下它的做法,學習它數據庫的設計,不也是一個好東西嗎? 
上一篇:[C#] DataView用法

下一篇:asp調用js代碼

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海丰县| 民县| 鲁甸县| 榆社县| 常州市| 神木县| 来凤县| 永顺县| 浦江县| 龙江县| 汝城县| 三亚市| 惠水县| 鄯善县| 平凉市| 剑川县| 淮安市| 浦北县| 乌鲁木齐市| 江陵县| 石台县| 洛川县| 徐闻县| 牟定县| 余姚市| 竹溪县| 江北区| 麻城市| 高安市| 额尔古纳市| 高邑县| 泰顺县| 株洲市| 茂名市| 南陵县| 达日县| 泸水县| 泊头市| 汾西县| 宜城市| 海伦市|