一起谈.NET技术,ASP.NET身份验证机制membership入门——项目

简介:   前面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下。  首先描述一下需求:  我们要做一个最简单的网站。有三类用户:匿名用户,员工,管理员,网站结构如下:      admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问。

  前面说了很多关于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:

<membership defaultProvider="mySqlMembershipProvider">
      
<providers>
        
<add name="mySqlMembershipProvider"
            type
="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName
="ConnectionString"
            enablePasswordRetrieval
="false" 
            enablePasswordReset
="true" 
            requiresQuestionAndAnswer
="false" 
            applicationName
="TestMembership" 
            requiresUniqueEmail
="true" 
            passwordFormat
="Hashed" 
            maxInvalidPasswordAttempts
="5" 
            minRequiredPasswordLength
="6" 
            minRequiredNonalphanumericCharacters
="0" 
            passwordAttemptWindow
="10" 
            passwordStrengthRegularExpression
=""/>
      
</providers>
    
</membership>

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

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

  4.接着配置roleManager:

< roleManager  enabled ="true"  defaultProvider ="myAspNetSqlRoleProvider" >
  
< providers >
    
< add  name ="myAspNetSqlRoleProvider"
         connectionStringName
="ConnectionString"
         applicationName
="TestMembership"  
         type
="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"   />
  
</ providers >
</ roleManager >

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

< authentication  mode ="Forms" >
    
< forms  loginUrl ="Login.aspx"
           protection
="All"
           timeout
="30"
           name
=".ASPXAUTH"  
           path
="/"
           slidingExpiration
="true"
           defaultUrl
="Default.aspx"
           cookieless
="UseDeviceProfile" />
</ authentication >

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

     protected   void  Page_Load( object  sender, EventArgs e)
    {
        Roles.CreateRole(
" admin " );
        Roles.CreateRole(
" employee " );
    }

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

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

      regUser页面代码如下:

< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="regUser.aspx.cs"  Inherits ="regUser"  % >

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 无标题页 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< table  border ="0"  cellpadding ="0"  cellspacing ="0" >
    
< tr >
        
< td > 用户名: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtName" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 密码: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtPwd"  TextMode ="Password" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 邮箱: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtEmail" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td  colspan ="2" >< asp:Button  runat ="server"  ID ="btnReg"  Text ="注册"  
                onclick
="btnReg_Click"   /></ td >
    
</ tr >
    
</ table >
    
</ form >
</ body >
</ html >

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

using  System;
using  System.Collections;
using  System.Configuration;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;

public   partial   class  regUser : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e){}
    
protected   void  btnReg_Click( object  sender, EventArgs e)
    {
        
/*  这里仅仅是为了演示Membership功能,所以验证、错误捕获等在此省略
         * 由于我们在web.config中将requiresQuestionAndAnswer设为false
         * 所以在这里只需要调用3个参数的重载即可
         * 
*/
        Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text);
        
// 将刚刚注册的用户添加Employee角色
        Roles.AddUserToRole(txtName.Text,  " employee " );
        
// 注册成功,将用户跳转到默认页面
        
// 所谓默认页面,就是在前面配置时forms节点下defaultUrl指定的页面
        FormsAuthentication.RedirectFromLoginPage(txtName.Text,  false );
    }
}

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

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

< %@ Page  Language ="C#"  AutoEventWireup ="true"  CodeFile ="Login.aspx.cs"  Inherits ="Login"  % >

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  runat ="server" >
    
< title > 无标题页 </ title >
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< table  border ="0"  cellpadding ="0"  cellspacing ="0" >
    
< tr >
        
< td > 用户名: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtName" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td > 密码: </ td >
        
< td >< asp:TextBox  runat ="server"  ID ="txtPwd"  TextMode ="Password" ></ asp:TextBox ></ td >
    
</ tr >
    
< tr >
        
< td  colspan ="2" >< asp:Button  runat ="server"  Text ="登录"  ID ="btnLogin"  
                onclick
="btnLogin_Click"   /></ td >
    
</ tr >
    
</ table >
    
</ form >
</ body >
</ html >

 Login.aspx.cs代码如下:

using  System;
using  System.Collections;
using  System.Configuration;
using  System.Data;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;

public   partial   class  Login : System.Web.UI.Page
{
    
protected   void  Page_Load( object  sender, EventArgs e){ }
    
protected   void  btnLogin_Click( object  sender, EventArgs e)
    {
        
if  (Membership.ValidateUser(txtName.Text, txtPwd.Text))
        {
            
// 登录成功向浏览器写入身份票据
            FormsAuthentication.SetAuthCookie(txtName.Text,  false );
            
// 跳转回最初请求的url或是默认url
            
// 注:所谓最初请求的url是指:如果我未经登录,
            
// 直接访问admin/admin.aspx这个页面,那么将会跳转到该登录页面
            
// 如果登录成功,则此方法将会以登录用户的身份跳转回
            
// admin/admin.aspx页面
            FormsAuthentication.RedirectFromLoginPage(txtName.Text,  false );
        }
        
else
        {
            ClientScript.RegisterStartupScript(
this .GetType(),  "" " alert('用户名或密码错误!'); " true );
        }
    }
}

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

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

< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
      
< authorization >
        
< allow  roles ="admin" />
        
< deny  users ="*" /> <!-- *代表的是所有用户 -->
      
</ authorization >
    
</ system.web >
</ configuration >

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

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

< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
      
< authorization >
        
< allow  roles ="employee" />
        
< deny  users ="*" />
      
</ authorization >
    
</ system.web >
</ configuration >

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

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

目录
相关文章
|
9天前
|
人工智能 开发框架 量子技术
【专栏】.NET 技术:驱动创新的力量
【4月更文挑战第29天】.NET技术,作为微软的开发框架,以其跨平台、开源和语言多样性驱动软件创新。它在云计算、AI/ML、混合现实等领域发挥关键作用,通过Azure、ML.NET等工具促进新兴技术发展。未来,.NET将涉足量子计算、微服务和无服务器计算,持续拓宽软件开发边界,成为创新的重要推动力。掌握.NET技术,对于开发者而言,意味着握有开启创新的钥匙。
|
9天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
9天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
9天前
|
开发框架 Cloud Native 开发者
【专栏】剖析.NET 技术的核心竞争力
【4月更文挑战第29天】本文探讨了.NET框架在软件开发中的核心竞争力:1) .NET Core实现跨平台与云原生技术的融合,支持多操作系统和容器化;2) 提升性能和开发者生产力,采用JIT、AOT优化,提供C#新特性和Roslyn编译器平台;3) 支持现代化应用架构,包括微服务和容器化,内置安全机制;4) 丰富的生态系统和社区支持,拥有庞大的开发者社区和微软的持续投入。这些优势使.NET在竞争激烈的市场中保持领先地位。
|
9天前
|
开发框架 .NET 开发者
【专栏】领略.NET 技术的创新力量
【4月更文挑战第29天】.NET技术自ASP.NET起历经创新,现以.NET Core为核心,展现跨平台能力,提升性能与生产力,支持现代化应用架构。.NET Core使开发者能用同一代码库在不同操作系统上构建应用,扩展至移动和物联网领域。性能提升,C#新特性简化编程,Roslyn编译器优化代码。拥抱微服务、容器化,内置安全机制,支持OAuth等标准。未来.NET 6将引入更快性能、Hot Reload等功能,预示着.NET将持续引领软件开发潮流,为开发者创造更多机会。
|
9天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
9天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
9天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
50 0
|
9天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
25 0
|
9天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
34 0