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

 成员资格和角色管理

目标

成员资格管理

成员角色管理

成员资格管理

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

ASP.NET 成员资格和角色管理_第1张图片

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

Membership类的属性

ASP.NET 成员资格和角色管理_第2张图片

Membership类的方法

ASP.NET 成员资格和角色管理_第3张图片

建立成员资格支持

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

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

ASP.NET 成员资格和角色管理_第4张图片

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

ASP.NET 成员资格和角色管理_第5张图片

ASP.NET 成员资格和角色管理_第6张图片

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

ASP.NET 成员资格和角色管理_第7张图片

ASP.NET 成员资格和角色管理_第8张图片

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

ASP.NET 成员资格和角色管理_第9张图片ASP.NET 成员资格和角色管理_第10张图片

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

ASP.NET 成员资格和角色管理_第11张图片

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

ASP.NET 成员资格和角色管理_第12张图片

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

ASP.NET 成员资格和角色管理_第13张图片

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

ASP.NET 成员资格和角色管理_第14张图片

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

[csharp] view plain copy
print ?
  1. "form1" runat="server">  
  2.    

      

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

Create New User


<% if (Membership.RequiresQuestionAndAnswer) { %> <% } %>
Username:
Password:
Confirm Password:
Email Address:
Password Question:
Password Answer:
ASP.NET 成员资格和角色管理_第15张图片

双击“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配置”,选择“安全”,之后弹出的内容将以图片展示:

ASP.NET 成员资格和角色管理_第16张图片


ASP.NET 成员资格和角色管理_第17张图片

ASP.NET 成员资格和角色管理_第18张图片

ASP.NET 成员资格和角色管理_第19张图片

ASP.NET 成员资格和角色管理_第20张图片

最后点击“完成”。

ASP.NET 成员资格和角色管理_第21张图片

ASP.NET 成员资格和角色管理_第22张图片

角色管理

Roles类

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

Roles类具有以下功能:

1.创建和管理角色

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

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

Roles类的主要方法:

ASP.NET 成员资格和角色管理_第23张图片

创建Roles类的代码文件:

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

ASP.NET 成员资格和角色管理_第24张图片

之后输入代码:

ASP.NET 成员资格和角色管理_第25张图片


ASP.NET 成员资格和角色管理_第26张图片

ASP.NET 成员资格和角色管理_第27张图片

ASP.NET 成员资格和角色管理_第28张图片

你可能感兴趣的:(ASP.NET网站开发)