安全性——验证与授权,成员资格与角色。
一、成员资格与角色,
第一步:注册数据库,在VS中运行dos命令窗口中,输入:aspnet_regsql,建立数据库表。
如何启动VS的dos命令窗口,在 ..\Microsoft Visual Studio 2012\Visual Studio Tools 文件中的 VS2012 x64 兼容工具命令提示
输入:aspnet_regsql
按照提示完成数据库的创建。
第二步:配置程序,web.config
SQL连接语句:
<connectionStrings> <add name="conn" connectionString="server=.;database=imd;user=sa;pwd=123"/> </connectionStrings>
membership设置:
<membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="conn" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership>
名称 : 说明
ApplicationName获取或设置要存储和检索其成员资格信息的应用程序的名称。
Description获取一条简短的易懂描述,它适合在管理工具或其他用户界面 (UI) 中显示。
EnablePasswordReset获取一个值,指示 SQL Server 成员资格提供程序是否配置为允许用户重置其密码。
EnablePasswordRetrieval获取一个值,指示 SQL Server 成员资格提供程序是否配置为允许用户检索其密码。
MaxInvalidPasswordAttempts获取锁定成员资格用户前允许的无效密码或无效密码提示问题答案尝试次数。
MinRequiredNonAlphanumericCharacters获取有效密码中必须包含的最少特殊字符数。
MinRequiredPasswordLength获取密码所要求的最小长度。
Name获得一个友好名称,用于在配置过程中引用提供程序。
PasswordAttemptWindow获取时间长度,在该时间间隔内对提供有效密码或密码答案的连续失败尝试次数进行跟踪。
PasswordFormat获取一个值,表示用于在 SQL Server 成员资格数据库中存储密码的格式。
PasswordStrengthRegularExpression获取用于计算密码的正则表达式。
RequiresQuestionAndAnswer获取一个值,指示 SQL Server 成员资格提供程序是否配置为要求用户在进行密码重置和检索时回答密码提示问题。
RequiresUniqueEmail获取一个值,指示 SQL Server 成员资格提供程序是否配置为要求每个用户名具有唯一的电子邮件地址。
第三步:程序编写:membership类,
需要引用
using System.Web.Security;
1.注册用户
Membership.CreateUser("qqq", "qqqqqq", "[email protected]");
2.验证用户
//登录按钮 protected void Button_denglu_Click(object sender, EventArgs e) { bool isOK = Membership.ValidateUser(TextBox_user.Text,TextBox_pwd.Text); if (isOK == true) { Response.Write("登陆成功!!!"); Label1.Text = Membership.GetUser(TextBox_user.Text).ToString(); } else { Response.Write("shibai!!"); Label1.Text = "未登陆"; } }
成功登录:
3.修改密码
使用membership的对象实例方法,GetUser()。
修改按钮:
//修改密码按钮 protected void Button2_Click(object sender, EventArgs e) { MembershipUser user = Membership.GetUser(Label1.Text); //找用户 if (user != null) { bool pwdOK = user.ChangePassword(TextBox_yuanpwd.Text, TextBox_newpwd.Text);//修改密码 if (pwdOK == true) { Response.Write("<script>alert(‘修改成功!‘);</script>"); } else { Response.Write("<script>alert(‘修改失败!‘);</script>"); } //user.ChangePassword(TextBox_yuanpwd.Text,TextBox_newpwd.Text);//修改密码 } }
4.获取(查找)用户:
按照以下格式设计一个页面
C#代码:
获取单个单用户:
//单个用户按钮 protected void Button1_Click(object sender, EventArgs e) { MembershipUser user = Membership.GetUser(TextBox1.Text);//获取单个用户的数据 Label1.Text = user.Email; }
获取所有用户:
//所有用户按钮 protected void Button2_Click(object sender, EventArgs e) { MembershipUserCollection users = Membership.GetAllUsers();//获取所有用户 //CheckBox的数据绑定。
CheckBoxList1.DataSource = users; CheckBoxList1.DataTextField = "Email"; CheckBoxList1.DataValueField = "UserName"; CheckBoxList1.DataBind(); }
获取单用户:
获取所有用户:
5.删除用户: Membership.DeleteUser(userName);
添加一个删除按钮,删除按钮代码:
protected void Button3_Click(object sender, EventArgs e) { //删除 string userName = CheckBoxList1.SelectedValue; Membership.DeleteUser(userName);//删除 //重新查询显示 MembershipUserCollection users = Membership.GetAllUsers(); CheckBoxList1.DataSource = users; CheckBoxList1.DataTextField = "Email"; CheckBoxList1.DataValueField = "UserName"; CheckBoxList1.DataBind(); }
选中用户
点击删除,删除成功:
6.禁用或启用:
在这之前先来了解下SQL中表的两个列名:IsApproved(是否通过验证)、IsLockedOut(是否已锁)
IsApproved是可以由管理员来修改的,用来判定新用户是否通过审核。
IsLockedOut是用户尝试登陆时多次输入错误的密码时,账户会被锁定,管理员只可以解锁,无法主动锁定。
未通过审核或者被锁定时,用户都无法正常登陆。只有通过审核并且未锁定的时候才可使用
//禁用按钮 protected void Button4_Click(object sender, EventArgs e) { string userName = CheckBoxList1.SelectedValue; //找 MembershipUser user = Membership.GetUser(userName); //改(还没有送回数据库) user.IsApproved = false; //保存(送回数据库) Membership.UpdateUser(user); } //启用按钮 protected void Button5_Click(object sender, EventArgs e) { string userName = CheckBoxList1.SelectedValue; //找 MembershipUser user = Membership.GetUser(userName); //改(还没有送回数据库) user.IsApproved = true; //保存(送回数据库) Membership.UpdateUser(user); }
修改后一定要记得改写数据库,即UpdateUser(用户名)。
7.解锁用户:
//解锁按钮 protected void Button6_Click(object sender, EventArgs e) { string userName = CheckBoxList1.SelectedValue; //找 MembershipUser user = Membership.GetUser(userName); //解锁 user.UnlockUser(); }
UnlockUser()语句可以直接改写数据库,解锁用户。