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:

<membershipdefaultProvider="mySqlMembershipProvider">
    <providers>
           <addname="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就足够了。好了,本项目到此结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值