Lost !

-----hard working for the furture.

导航

统计

ASP.NET身份验证机制membership入门 项目

面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下。

  首先描述一下需求:

  我们要做一个最简单的网站。有三类用户:匿名用户,员工,管理员,网站结构如下:

    

     admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问。Default.aspx允许所有用户访问。Login.aspx实现登陆功能,regUser.aspx实现注册用户功能。

  1.首先我们新建一个网站

  2.进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx这个目录下,找到aspnet_regsql.exe,运行,并一路下一步,得到aspnetdb数据库

  3.打开网站,打开web.config文件,配置membership:

  1. <membership defaultProvider="mySqlMembershipProvider"> 
  2.       <providers> 
  3.         <add name="mySqlMembershipProvider" 
  4.             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
  5.             connectionStringName="ConnectionString" 
  6.             enablePasswordRetrieval="false"   
  7.             enablePasswordReset="true"   
  8.             requiresQuestionAndAnswer="false"   
  9.             applicationName="TestMembership"   
  10.             requiresUniqueEmail="true"   
  11.             passwordFormat="Hashed"   
  12.             maxInvalidPasswordAttempts="5"   
  13.             minRequiredPasswordLength="6"   
  14.             minRequiredNonalphanumericCharacters="0"   
  15.             passwordAttemptWindow="10"   
  16.             passwordStrengthRegularExpression=""/> 
  17.       </providers> 
  18.     </membership> 

 然后继续添加连接字符串:

  1. <connectionStrings> 
  2.   <add name="ConnectionString" connectionString="server=.;uid=sa;pwd=sa;database=aspnetdb"/> 
  3. </connectionStrings> 

4.接着配置roleManager:

  1. <roleManager enabled="true" defaultProvider="myAspNetSqlRoleProvider"> 
  2.   <providers> 
  3.     <add name="myAspNetSqlRoleProvider" 
  4.          connectionStringName="ConnectionString" 
  5.          applicationName="TestMembership"   
  6.          type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
  7.   </providers> 
  8. </roleManager> 

5.接着在项目中添加两个页面,一个首页Default.aspx一个登陆页面Default.aspx,随后继续添加forms身份验证的配置:

  1. <authentication mode="Forms"> 
  2.     <forms loginUrl="Login.aspx" 
  3.            protection="All" 
  4.            timeout="30" 
  5.            name=".ASPXAUTH"   
  6.            path="/" 
  7.            slidingExpiration="true" 
  8.            defaultUrl="Default.aspx" 
  9.            cookieless="UseDeviceProfile"/> 
  10. </authentication> 

现在需要添加两种角色employee、admin,添加角色的方法很简单方法有很多,我们介绍最简单的一种:新建一个页面,在这个页面的page_load事件当中加入如下代码:

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     Roles.CreateRole("admin");  
  4.     Roles.CreateRole("employee");  
  5. }  

浏览一下这个页面就添加了这俩角色。

      添加完角色,就该实现注册用户功能了。

      regUser页面代码如下:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="regUser.aspx.cs" Inherits="regUser" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml"> 
  6. <head runat="server"> 
  7.     <title>无标题页</title> 
  8. </head> 
  9. <body> 
  10.     <form id="form1" runat="server"> 
  11.     <table border="0" cellpadding="0" cellspacing="0"> 
  12.     <tr> 
  13.         <td>用户名:</td> 
  14.         <td><asp:TextBox runat="server" ID="txtName"></asp:TextBox></td> 
  15.     </tr> 
  16.     <tr> 
  17.         <td>密码:</td> 
  18.         <td><asp:TextBox runat="server" ID="txtPwd" TextMode="Password"></asp:TextBox></td> 
  19.     </tr> 
  20.     <tr> 
  21.         <td>邮箱:</td> 
  22.         <td><asp:TextBox runat="server" ID="txtEmail"></asp:TextBox></td> 
  23.     </tr> 
  24.     <tr> 
  25.         <td colspan="2"><asp:Button runat="server" ID="btnReg" Text="注册"   
  26.                 onclick="btnReg_Click" /></td> 
  27.     </tr> 
  28.     </table> 
  29.     </form> 
  30. </body> 
  31. </html> 

这是regUser.aspx.cs文件中的代码

  1. using System;  
  2. using System.Collections;  
  3. using System.Configuration;  
  4. using System.Data;  
  5. using System.Linq;  
  6. using System.Web;  
  7. using System.Web.Security;  
  8. using System.Web.UI;  
  9. using System.Web.UI.HtmlControls;  
  10. using System.Web.UI.WebControls;  
  11. using System.Web.UI.WebControls.WebParts;  
  12. using System.Xml.Linq;  
  13.  
  14. public partial class regUser : System.Web.UI.Page  
  15. {  
  16.     protected void Page_Load(object sender, EventArgs e){}  
  17.     protected void btnReg_Click(object sender, EventArgs e)  
  18.     {  
  19.         /* 这里仅仅是为了演示Membership功能,所以验证、错误捕获等在此省略
  20.          * 由于我们在web.config中将requiresQuestionAndAnswer设为false  
  21.          * 所以在这里只需要调用3个参数的重载即可  
  22.          * */ 
  23.         Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text);  
  24.         //将刚刚注册的用户添加Employee角色  
  25.         Roles.AddUserToRole(txtName.Text, "employee");  
  26.         //注册成功,将用户跳转到默认页面  
  27.         //所谓默认页面,就是在前面配置时forms节点下defaultUrl指定的页面  
  28.         FormsAuthentication.RedirectFromLoginPage(txtName.Text, false);  
  29.     }  
  30. }  

ok,注册功能已经差不多了,现在我们开始完成登录页面。

  打开Login.aspx页面,加上如下代码:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml"> 
  6. <head runat="server"> 
  7.     <title>无标题页</title> 
  8. </head> 
  9. <body> 
  10.     <form id="form1" runat="server"> 
  11.     <table border="0" cellpadding="0" cellspacing="0"> 
  12.     <tr> 
  13.         <td>用户名:</td> 
  14.         <td><asp:TextBox runat="server" ID="txtName"></asp:TextBox></td> 
  15.     </tr> 
  16.     <tr> 
  17.         <td>密码:</td> 
  18.         <td><asp:TextBox runat="server" ID="txtPwd" TextMode="Password"></asp:TextBox></td> 
  19.     </tr> 
  20.     <tr> 
  21.         <td colspan="2"><asp:Button runat="server" Text="登录" ID="btnLogin"   
  22.                 onclick="btnLogin_Click" /></td> 
  23.     </tr> 
  24.     </table> 
  25.     </form> 
  26. </body> 
  27. </html> 

Login.aspx.cs代码如下:

  1. using System;  
  2. using System.Collections;  
  3. using System.Configuration;  
  4. using System.Data;  
  5. using System.Linq;  
  6. using System.Web;  
  7. using System.Web.Security;  
  8. using System.Web.UI;  
  9. using System.Web.UI.HtmlControls;  
  10. using System.Web.UI.WebControls;  
  11. using System.Web.UI.WebControls.WebParts;  
  12. using System.Xml.Linq;  
  13.  
  14. public partial class Login : System.Web.UI.Page  
  15. {  
  16.     protected void Page_Load(object sender, EventArgs e){ }  
  17.     protected void btnLogin_Click(object sender, EventArgs e)  
  18.     {  
  19.         if (Membership.ValidateUser(txtName.Text, txtPwd.Text))  
  20.         {  
  21.             //登录成功向浏览器写入身份票据  
  22.             FormsAuthentication.SetAuthCookie(txtName.Text, false);  
  23.             //跳转回最初请求的url或是默认url  
  24.             //注:所谓最初请求的url是指:如果我未经登录,  
  25.             //直接访问admin/admin.aspx这个页面,那么将会跳转到该登录页面  
  26.             //如果登录成功,则此方法将会以登录用户的身份跳转回  
  27.             //admin/admin.aspx页面  
  28.             FormsAuthentication.RedirectFromLoginPage(txtName.Text, false);  
  29.         }  
  30.         else 
  31.         {  
  32.             ClientScript.RegisterStartupScript(this.GetType(), """alert('用户名或密码错误!');"true);  
  33.         }  
  34.     }  
  35. }  
  36.  

好了,注册和登录都已经完成了,剩下的任务就是配置访问权限这一项了,其实很简单:在admin和employee目录下分别添加两个web.config文件

admin目录下的web.config内容如下:

  1. <configuration> 
  2.     <appSettings/> 
  3.     <connectionStrings/> 
  4.     <system.web> 
  5.       <authorization> 
  6.         <allow roles="admin"/> 
  7.         <deny users="*"/><!--*代表的是所有用户--> 
  8.       </authorization> 
  9.     </system.web> 
  10. </configuration> 

表示所有具有admin角色的用户允许访问,除此之外全部拒绝访问。

employee目录下的web.config内容如下:

  1. <configuration> 
  2.     <appSettings/> 
  3.     <connectionStrings/> 
  4.     <system.web> 
  5.       <authorization> 
  6.         <allow roles="employee"/> 
  7.         <deny users="*"/> 
  8.       </authorization> 
  9.     </system.web> 
  10. </configuration> 

同admin目录下的配置,*是通配符,代表所有用户,?代表所有匿名用户 

  我们实现的功能有:登录,注册,权限控制。一个网站所需要的功能基本上都已经实现了,项目有点简单,但是功能齐全。一般来说80%的站点使用membership就足够了。

posted on   失落''80  阅读(136)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示