在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建、修改、删除用户和角色,为用户分配角色,管理角色中的用户等等。于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中,不需要考虑这方面的内容,把更多的精力投入到业务逻辑的开发中去。从而大大的提高了开发的效率。下面我们就来学习一下如何使用membership。 1.添加数据库支持要使用membership首先需要数据库的支持,所以我们第一步就是创建用来存放用户、角色等信息的表结构。别担心,MS早就把创建表的语句写好了,并且还提供了用户界面,让我们点点鼠标就可以创建好所需的结构了。
复制过来的代码如下:
<membership>
<providers> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership>
下面是主要的几个属性的含义: name:数据提供程序的名称,由于我们是从machine.config复制过来的,所以必须改名,防止重名 type:数据提供程序类型,如果使用的是MSSQL数据库,则保持不变即可,如果使用的是Oracle等其他数据库,则必须自己创建一个类来继承MembershipProvider抽象基类,重写里边的所有抽象方法,然后把类型写在这里即可。 connectionStringName:该属性必须指定在<connectionStrings>节点中,一个连接字符串的名字。 applicationName:应用程序名称,membership允许多个应用程序共同使用一个数据库来管理自己的用户、角色信息,各应用程序只需配置不同的applicationName即可,当然,如果想要多个应用程序使用同一份用户角色信息,只需设置一样的applicationName即可。 requiresUniqueEmail:顾名思义,用户注册时,是否需要提供未注册过的邮箱。 passwordFormat:密码存储格式,密码保存在数据库中的格式,最常用的有Clear(不加密)和Hashed(使用SHA1算法加密) minRequiredNonalphanumericCharacters:指定有效密码中必须包含的特殊字符的最小数量,就是说不是字母也不是数字的字符的数量,比如+-*/,.什么的,增加密码强度
好了,我们将配置修改一下并添加连接字符串:
<connectionStrings>
<add name="ConnectionString" connectionString="server=.;uid=sa;pwd=sa;database=aspnetdb"/> </connectionStrings> <system.web> <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="true" applicationName="TestMembership" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership> </system.web>
上面用黄色高亮字体标注出来的属性,是为了告诉membership采用我们刚才添加的mySqlMembershipProvider这个配置,因为machine.config中有一个AspNetSqlMembershipProvider,我们又在web.config中又添加了一个mySqlMembershipProvider,现在有了两个配置,所以应该使用defaultProvider属性指明本网站使用哪个配置。随后又指定了连接字符串配置的名称,一个Email不允许重复注册,最小密码长度为6,不限制密码中必须含有标点符号等配置。 3.ASP.NET身份验证配置membership算是配置到这里了,但是还没有结束,我们还需要把ASP.NET的身份验证机制配置为Forms身份验证。
补充内容: ASP.NET一共有三种身份验证方式,分别为:
Windows验证是一种把能够访问到IIS的用户认为是已经通过身份验证的用户。可以通过windows自带的身份验证策略来控制哪些页面用户可以访问,哪些不能访问。这是一种最简单的方式,基本不用写多少代码,全部通过配置就可以实现访问的控制。 Passport验证是由微软提供身份验证服务。当然这是收费的。 Forms验证就是在用户登录时,向浏览器中添加一个cookie,然后在用户每次访问时都检测这个cookie,从而达到身份验证的目的。
配置Forms身份验证其实就是把下面代码复制到web.config中去就可以了:
<system.web>
<authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile"/> </authentication> </system.web> 下面是说明(msdn抄的):
需要说明一下的是LoginUrl和DefaultUrl属性:LoginUrl指向登录页面,当ASP.NET判断出该用户请求的资源不允许匿名访问,而该用户未登录时,ASP.NET会自动跳转到LoginUrl所指向的页面,当登录成功后,则跳转回原来请求的页面。DefaultUrl指向默认页面。当我们直接访问登录页面,并登录成功后,这时ASP.NET会跳转到DefaultUrl指向的页面。其他的选项不写都可以,因为有默认值。
写blog也真不是一件简单的事情,相信自己能够坚持下去!先写到这里,明天继续 |
请发表评论