基于PetShop的数据可视化网站(四):自定义成员资格

由于项目要求,还需要加入成员管理以及登陆等内容,简单介绍下自定义成员资格。

具体的项目文件可以参考我的github仓库

自定义成员资格

自定义成员资格可以理解为对用户的管理,即用户的创建,验证,修改密码等等操作。在ASP.NET中提供了一个类,可以较为清晰的规定这些操作,这个类叫做MembershipProvider类

MembershipProvider类是一个抽象类,因此我们需要继承这个抽象类并进行实现。

我们可以在BLL层新建一个类,例如:MemberShipProvider.cs。这个类继承System.Web.Security.MembershipProvider即可,并快捷操作对抽象类进行实现。代码如下:

public class MemberShipProvider
        :System.Web.Security.MembershipProvider

实现之后会发现多出了一堆方法需要实现,例如ChangePassword()等等。这里我们以CreateUser为例进行讲解。

创建用户的基本思路是对浏览器端传输过来的数据进行简单的验证,验证通过后调用数据访问层相应方法插入用户数据,最终返回相应内容,具体代码如下:

public override System.Web.Security.MembershipUser CreateUser(
            string username, 
            string password, 
            string email, 
            string passwordQuestion, 
            string passwordAnswer, 
            bool isApproved, 
            object providerUserKey, 
            out System.Web.Security.MembershipCreateStatus status)
        {
            //检查username是否为空,为空则将status赋值为InvalidUserName
            if (string.IsNullOrEmpty(username))
            {
                status = System.Web.Security.MembershipCreateStatus.InvalidUserName;
                return null;
            }
            //调用数据访问层的创建用户方法
            FWSync.IDAL.IUser dal = FWSync.DALFactory.DataAccess.CreateUser();
            //调用数据访问层验证用户是否存在的方法
            bool isexist = dal.ValidateUserExist(username);
            //如果用户存在,将status赋值为DuplicateUserName
            if (isexist)
            {
                status = System.Web.Security.MembershipCreateStatus.DuplicateUserName;
                return null;
            }
            //创建相应的用户表结构
            UserInfo us = new UserInfo();
            us.UserName = username;
            //这里要用到md5加密密码
            us.PassWord = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5"); 
            //调用数据访问层插入用户的方法
            int userid = dal.InsertUser(us);
            //插入成功,则将status赋值为Success
            status = System.Web.Security.MembershipCreateStatus.Success;
            //创建一个MembershipUser并返回
            System.Web.Security.MembershipUser user
                = new System.Web.Security.MembershipUser(
                    "MyMemberShip",
                    username,
                    userid,
                    string.Empty,
                    string.Empty,
                    string.Empty,
                    true,
                    false,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now,
                    DateTime.Now
                    );
            return user;
        }

需要注意的是最后返回的user中我设置了好多空串或者当前时间,这些内容基本上都是邮箱或者注册时间之类的,因为我没有使用到所以未赋值,如果使用到的话大部分内容可以从传来的变量中拿到。

user中的”MyMemberShip”是web.config中默认的成员资格的配置参数,其配置代码如下

<membership defaultProvider="MyMemberShip">
      <providers>
        <clear/>
        <add name="MyMemberShip" type="FWSync.BLL.MemberShipProvider,FWSync.BLL"/>
      providers>
    membership>

接下来是在注册页面中如何使用刚写好的自定义成员资格,我简单的在注册页面中写了两个TextBox和一个Button,TextBox中分别写入用户名和密码,Button点击后提交,下面是Button的后台代码:

protected void btnregister_Click(object sender, EventArgs e)
    {
        string username = this.tbxusername.Text;
        string password = this.tbxpassword.Text;

        System.Web.Security.MembershipCreateStatus status;

        //本来那两个"haha"是string.Empty,代表着邮箱之类的东西,但是那么写会报错,所以这里随便写个串就可以了
        System.Web.Security.MembershipUser user =
            System.Web.Security.Membership.CreateUser(
            username,
            password,
            string.Empty,
            "haha",
            "haha",
            true,
            out status
            );
        //out 返回的status,根据status判断是何种错误,并在界面上进行提示
        switch (status)
        {
            case MembershipCreateStatus.Success:
                this.Response.Redirect("~/Default.aspx");
                break;
            case MembershipCreateStatus.InvalidUserName:
                this.lblWarn.Text = "用户名错误";
                break;
            case MembershipCreateStatus.DuplicateUserName:
                this.lblWarn.Text = "用户名已经存在";
                break;
            default:
                this.lblWarn.Text = "未知错误";
                break;
        }

这里我啰嗦下out,在c#这个语言里面,out可以粗略的理解为传指针,我们在定义了status后,可以在CreateUser这个方法中改变它的值,最后通过返回的值判断用户注册这个函数出了什么问题。

你可能感兴趣的:(asp.net,自定义成员资格,asp-net)