ASP.NET 成员资格和角色管理

本文介绍ASP.NET中的成员资格管理和角色管理功能,包括如何使用Membership类进行用户验证、密码管理和成员资格信息存储,以及如何通过Roles类实现角色创建与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 成员资格和角色管理

目标

成员资格管理

成员角色管理

成员资格管理

在Web应用程序中有关成员验证、管理等内容基本没有太大区别。可以考虑将这些相对固定的内容抽象并形成独立的模型以方便我们的开发。ASP.NET解决了这个方案,提供了成员资格管理器功能。核心的利用内置的成员库表(SQL Server)、成员资格管理API(Membership、MembershipUser等)、成员资格提供程序(SqlMembershipProvider等),实现模块化和自动化的成员资格管理模式。

成员资格简介

ASP.NET成员资格支持下列功能:

(1)创建新用户和密码。

(2)将成员资格信息(用户名、密码和支持数据)存储在Microsoft SQL Server、Active Directory或其他数据存储区。

(3)对访问站点的用户进行身份验证。可以以编辑方式验证用户,也可以使用ASP.NET登录控件创建一个只需要很少代码或无代码的完整身份验证系统。

(4)管理密码,包括创建、更改和重置密码。根据用户选择的成员资格选项不同,成员资格系统还可以提供一个使用用户提供的问题和答案的自动密码重置系统。

(5)公开经过身份验证的用户的唯一标识,用户可以在自己的应用程序中使用该标识,也可以将该标志与ASP.NET个性化设置和角色管理(授权)系统集成。

(6)指定自定义成员资格提供程序,使用户可以改为自己的代码管理成员资格及自定义数据存储区中维护成员资格数据。

Membership类

Membership类用于验证用户凭据并管理用户设置。Membership类可以独自使用,或者与FormsAuthentication类一起使用,以便创建一个完整的站点用户身份验证系统。

Membership类具有以下几个主要功能:

(1)创建和管理用户

(2)将成员资格信息存储在SQL Server或其他数据存储区中。

(3)对访问站点的用户进行身份验证。可以使用编辑方式对用户进行身份验证,也可以使用登录控件创建一个只需很少代码或无需代码的完整身份验证系统。

(4)管理密码,包括创建、更改、检索和重置密码等。可以选择配置成员资格管理功能,以要求一个密码提示问题及其答案来对忘记密码的用户的密码进行重置。

Membership类的默认提供程序将用户信息以预定格式储存到一个SQL Server数据库ASPNETDB中,如果需要使用一个定制的数据库,则可以创建自己提供的程序。

Membership类的属性

Membership类的方法


建立成员资格支持

要创建一个基于成员资格API的身份验证层,首先选择成员资格提供程序和建立数据存储。

(1)点击“开始”选择“程序”,选择“Microsoft Visual Studio 2010”选择“Visual Studio Tools”最后点击“Visual Studio 命令提示(2010)”,弹出“Visual Studio 命令提示(2010)”对话框,在对话框中输入“aspnet_regsql”点击回车。

(2)弹出“ASP.NET SQL Server安装向导”,点击“下一步”,弹出“选择安装选项”,选择“为应用程序服务配置SQL Server(0)”,点击“下一步”。

(3)弹出“选择服务器和数据库”,服务器填写“.”,数据库选择“默认”,点击“下一步”,弹出“请确定您的设置”,点击“下一步”。

(4)弹出“数据库已被创建或修改”,点击“完成”,返回“Visual Studio 命令提示(2010)”提示符对话框。

(5)打开“SQL Server Management Studio”软件,点击“数据库”右键选择“刷新”。

(6)打开“Microsoft Visual Studio 2010”,点击“新建”选择“项目”,弹出“新建项目”模版,在模版中选择“Web”——“ASP.NET Web应用程序”,点击“确定”


(7)在“WebApplocation”右键点击“添加”——“新建项”,弹出“添加新项”模版,选择“Web”——“Web窗体”,更改“名称”点击“添加”。

(8)之后就是添加一系列代码:(以下以图片显示)点击“开始”选择“程序”,找到“Microsoft Visual Studio 2010”选择“Microsoft Visual Studio 2010 文档”,弹出“Microsoft Help查看器”。


之后在添加的新页面中复制图中紫色的代码点击进入找到的代码形式为:

[csharp] view plain copy
print ?
  1. <form id="form1" runat="server">  
  2.    <h3>  
  3.        Create New User</h3>  
  4.    <asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />  
  5.    <table cellpadding="3" border="0">  
  6.        <tr>  
  7.            <td>  
  8.                Username:  
  9.            </td>  
  10.            <td>  
  11.                <asp:TextBox ID="UsernameTextbox" runat="server" />  
  12.            </td>  
  13.            <td>  
  14.                <asp:RequiredFieldValidator ID="UsernameRequiredValidator" runat="server" ControlToValidate="UserNameTextbox"  
  15.                    ForeColor="red" Display="Static" ErrorMessage="Required" />  
  16.            </td>  
  17.        </tr>  
  18.        <tr>  
  19.            <td>  
  20.                Password:  
  21.            </td>  
  22.            <td>  
  23.                <asp:TextBox ID="PasswordTextbox" runat="server" TextMode="Password" />  
  24.            </td>  
  25.            <td>  
  26.                <asp:RequiredFieldValidator ID="PasswordRequiredValidator" runat="server" ControlToValidate="PasswordTextbox"  
  27.                    ForeColor="red" Display="Static" ErrorMessage="Required" />  
  28.            </td>  
  29.        </tr>  
  30.        <tr>  
  31.            <td>  
  32.                Confirm Password:  
  33.            </td>  
  34.            <td>  
  35.                <asp:TextBox ID="PasswordConfirmTextbox" runat="server" TextMode="Password" />  
  36.            </td>  
  37.            <td>  
  38.                <asp:RequiredFieldValidator ID="PasswordConfirmRequiredValidator" runat="server"  
  39.                    ControlToValidate="PasswordConfirmTextbox" ForeColor="red" Display="Static" ErrorMessage="Required" />  
  40.                <asp:CompareValidator ID="PasswordConfirmCompareValidator" runat="server" ControlToValidate="PasswordConfirmTextbox"  
  41.                    ForeColor="red" Display="Static" ControlToCompare="PasswordTextBox" ErrorMessage="Confirm password must match password." />  
  42.            </td>  
  43.        </tr>  
  44.        <tr>  
  45.            <td>  
  46.                Email Address:  
  47.            </td>  
  48.            <td>  
  49.                <asp:TextBox ID="EmailTextbox" runat="server" />  
  50.            </td>  
  51.            <td>  
  52.                <asp:RequiredFieldValidator ID="EmailRequiredValidator" runat="server" ControlToValidate="EmailTextbox"  
  53.                    ForeColor="red" Display="Static" ErrorMessage="Required" />  
  54.            </td>  
  55.        </tr>  
  56.        <% if (Membership.RequiresQuestionAndAnswer)  
  57.           { %>  
  58.        <tr>  
  59.            <td>  
  60.                Password Question:  
  61.            </td>  
  62.            <td>  
  63.                <asp:TextBox ID="PasswordQuestionTextbox" runat="server" />  
  64.            </td>  
  65.            <td>  
  66.                <asp:RequiredFieldValidator ID="PasswordQuestionRequiredValidator" runat="server"  
  67.                    ControlToValidate="PasswordQuestionTextbox" ForeColor="red" Display="Static"  
  68.                    ErrorMessage="Required" />  
  69.            </td>  
  70.        </tr>  
  71.        <tr>  
  72.            <td>  
  73.                Password Answer:  
  74.            </td>  
  75.            <td>  
  76.                <asp:TextBox ID="PasswordAnswerTextbox" runat="server" />  
  77.            </td>  
  78.            <td>  
  79.                <asp:RequiredFieldValidator ID="PasswordAnswerRequiredValidator" runat="server" ControlToValidate="PasswordAnswerTextbox"  
  80.                    ForeColor="red" Display="Static" ErrorMessage="Required" />  
  81.            </td>  
  82.        </tr>  
  83.        <% } %>  
  84.        <tr>  
  85.            <td>  
  86.            </td>  
  87.            <td>  
  88.                <asp:Button ID="CreateUserButton" Text="Create User" OnClick="CreateUser_OnClick"  
  89.                    runat="server" />  
  90.            </td>  
  91.        </tr>  
  92.    </table>  
  93.    </form>  
 <form id="form1" runat="server">
    <h3>
        Create New User</h3>
    <asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
    <table cellpadding="3" border="0">
        <tr>
            <td>
                Username:
            </td>
            <td>
                <asp:TextBox ID="UsernameTextbox" runat="server" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="UsernameRequiredValidator" runat="server" ControlToValidate="UserNameTextbox"
                    ForeColor="red" Display="Static" ErrorMessage="Required" />
            </td>
        </tr>
        <tr>
            <td>
                Password:
            </td>
            <td>
                <asp:TextBox ID="PasswordTextbox" runat="server" TextMode="Password" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="PasswordRequiredValidator" runat="server" ControlToValidate="PasswordTextbox"
                    ForeColor="red" Display="Static" ErrorMessage="Required" />
            </td>
        </tr>
        <tr>
            <td>
                Confirm Password:
            </td>
            <td>
                <asp:TextBox ID="PasswordConfirmTextbox" runat="server" TextMode="Password" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="PasswordConfirmRequiredValidator" runat="server"
                    ControlToValidate="PasswordConfirmTextbox" ForeColor="red" Display="Static" ErrorMessage="Required" />
                <asp:CompareValidator ID="PasswordConfirmCompareValidator" runat="server" ControlToValidate="PasswordConfirmTextbox"
                    ForeColor="red" Display="Static" ControlToCompare="PasswordTextBox" ErrorMessage="Confirm password must match password." />
            </td>
        </tr>
        <tr>
            <td>
                Email Address:
            </td>
            <td>
                <asp:TextBox ID="EmailTextbox" runat="server" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="EmailRequiredValidator" runat="server" ControlToValidate="EmailTextbox"
                    ForeColor="red" Display="Static" ErrorMessage="Required" />
            </td>
        </tr>
        <% if (Membership.RequiresQuestionAndAnswer)
           { %>
        <tr>
            <td>
                Password Question:
            </td>
            <td>
                <asp:TextBox ID="PasswordQuestionTextbox" runat="server" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="PasswordQuestionRequiredValidator" runat="server"
                    ControlToValidate="PasswordQuestionTextbox" ForeColor="red" Display="Static"
                    ErrorMessage="Required" />
            </td>
        </tr>
        <tr>
            <td>
                Password Answer:
            </td>
            <td>
                <asp:TextBox ID="PasswordAnswerTextbox" runat="server" />
            </td>
            <td>
                <asp:RequiredFieldValidator ID="PasswordAnswerRequiredValidator" runat="server" ControlToValidate="PasswordAnswerTextbox"
                    ForeColor="red" Display="Static" ErrorMessage="Required" />
            </td>
        </tr>
        <% } %>
        <tr>
            <td>
            </td>
            <td>
                <asp:Button ID="CreateUserButton" Text="Create User" OnClick="CreateUser_OnClick"
                    runat="server" />
            </td>
        </tr>
    </table>
    </form>


双击“Create User”进入:

[csharp] view plain copy
print ?
  1. public void CreateUser_OnClick(object sender, EventArgs args)  
  2.         {  
  3.             // Create new user and retrieve create status result.  
  4.   
  5.   
  6.             MembershipCreateStatus status;  
  7.             string passwordQuestion = "";  
  8.             string passwordAnswer = "";  
  9.   
  10.             if (Membership.RequiresQuestionAndAnswer)  
  11.             {  
  12.                 passwordQuestion = PasswordQuestionTextbox.Text;  
  13.                 passwordAnswer = PasswordAnswerTextbox.Text;  
  14.             }  
  15.   
  16.             try  
  17.             {  
  18.                 MembershipUser newUser = Membership.CreateUser(UsernameTextbox.Text, PasswordTextbox.Text,  
  19.                                                                EmailTextbox.Text, passwordQuestion,  
  20.                                                                passwordAnswer, trueout status);  
  21.                 if (newUser == null)  
  22.                 {  
  23.                     Msg.Text = GetErrorMessage(status);  
  24.                 }  
  25.                 else  
  26.                 {  
  27.                     Response.Redirect("Default.aspx");  
  28.                 }  
  29.             }  
  30.             catch  
  31.             {  
  32.                 Msg.Text = "An exception occurred creating the user.";  
  33.             }  
  34.         }  
  35.   
  36.         public string GetErrorMessage(MembershipCreateStatus status)  
  37.         {  
  38.             switch (status)  
  39.             {  
  40.                 case MembershipCreateStatus.DuplicateUserName:  
  41.                     return "Username already exists. Please enter a different user name.";  
  42.   
  43.                 case MembershipCreateStatus.DuplicateEmail:  
  44.                     return "A username for that e-mail address already exists. Please enter a different e-mail address.";  
  45.   
  46.                 case MembershipCreateStatus.InvalidPassword:  
  47.                     return "The password provided is invalid. Please enter a valid password value.";  
  48.   
  49.                 case MembershipCreateStatus.InvalidEmail:  
  50.                     return "The e-mail address provided is invalid. Please check the value and try again.";  
  51.   
  52.                 case MembershipCreateStatus.InvalidAnswer:  
  53.                     return "The password retrieval answer provided is invalid. Please check the value and try again.";  
  54.   
  55.                 case MembershipCreateStatus.InvalidQuestion:  
  56.                     return "The password retrieval question provided is invalid. Please check the value and try again.";  
  57.   
  58.                 case MembershipCreateStatus.InvalidUserName:  
  59.                     return "The user name provided is invalid. Please check the value and try again.";  
  60.   
  61.                 case MembershipCreateStatus.ProviderError:  
  62.                     return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";  
  63.   
  64.                 case MembershipCreateStatus.UserRejected:  
  65.                     return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";  
  66.   
  67.                 default:  
  68.                     return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";  
  69.             }  
public void CreateUser_OnClick(object sender, EventArgs args)
        {
            // Create new user and retrieve create status result.


            MembershipCreateStatus status;
            string passwordQuestion = "";
            string passwordAnswer = "";

            if (Membership.RequiresQuestionAndAnswer)
            {
                passwordQuestion = PasswordQuestionTextbox.Text;
                passwordAnswer = PasswordAnswerTextbox.Text;
            }

            try
            {
                MembershipUser newUser = Membership.CreateUser(UsernameTextbox.Text, PasswordTextbox.Text,
                                                               EmailTextbox.Text, passwordQuestion,
                                                               passwordAnswer, true, out status);
                if (newUser == null)
                {
                    Msg.Text = GetErrorMessage(status);
                }
                else
                {
                    Response.Redirect("Default.aspx");
                }
            }
            catch
            {
                Msg.Text = "An exception occurred creating the user.";
            }
        }

        public string GetErrorMessage(MembershipCreateStatus status)
        {
            switch (status)
            {
                case MembershipCreateStatus.DuplicateUserName:
                    return "Username already exists. Please enter a different user name.";

                case MembershipCreateStatus.DuplicateEmail:
                    return "A username for that e-mail address already exists. Please enter a different e-mail address.";

                case MembershipCreateStatus.InvalidPassword:
                    return "The password provided is invalid. Please enter a valid password value.";

                case MembershipCreateStatus.InvalidEmail:
                    return "The e-mail address provided is invalid. Please check the value and try again.";

                case MembershipCreateStatus.InvalidAnswer:
                    return "The password retrieval answer provided is invalid. Please check the value and try again.";

                case MembershipCreateStatus.InvalidQuestion:
                    return "The password retrieval question provided is invalid. Please check the value and try again.";

                case MembershipCreateStatus.InvalidUserName:
                    return "The user name provided is invalid. Please check the value and try again.";

                case MembershipCreateStatus.ProviderError:
                    return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

                case MembershipCreateStatus.UserRejected:
                    return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

                default:
                    return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
            }

(9)点击“项目”选择“ASP.NET配置”,选择“安全”,之后弹出的内容将以图片展示:






最后点击“完成”。

角色管理

Roles类

ASP.NET网站管理配置工具(WAST)提供一个可视化界面用于建立用户和角色的关系。角色管理API中包括多个类,最重要的是Roles类。该类分割了用户界面与执行底层数据访问的角色管理提供程序,从而为快速实现多种数据源存储的角色管理应用提供了技术支持。

Roles类具有以下功能:

1.创建和管理角色

2.将角色信息存储在SQL Server或其他数据源中

3.获取有关角色管理配置的详细内容

Roles类的主要方法:


创建Roles类的代码文件:

在“WebApplocation”右键点击“添加”——“新建项”,弹出“添加新项”,添加新的项目,更改名称。

之后输入代码:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值