VS自带修改密码控件Changepassword,这个控件虽然可以修改,但毕竟是别人的东西,很多地方不符合自己的要求。因此很多时候我们都希望自己来制作漂亮的修改密码页面。
制作修改密码前,必须要明确数据库里面保存的密码是以明文方式保存,还是以密文方式保存,如果是前者是相对简单得多。
一、以明文方式保存。
只有登录用户才能修改密码,因此要首先判断用户是否登录,如果没有登录,则将而面转向登录页。
代码如下:
代码 private static string username; protected void Page_Load( object sender, EventArgs e) { if (Context.User.Identity.IsAuthenticated) username = Context.User.Identity.Name; else Response.Redirect( " login.aspx " ); }
然后让登录用户输入自己的旧密码和新密码,进行密码修改。
代码如下:
代码 protected void Button1_Click( object sender, EventArgs e) { String oldpwd = TextBox1.Text.Trim(); string newpwd = TextBox3.Text.Trim(); MembershipUser u = Membership.GetUser(Context.User.Identity.Name); if (oldpwd != u.GetPassword( " default " )) { Response.Write( " <script>alert('旧密码错误!');</script> " ); } else { try { u.ChangePassword(oldpwd, newpwd); } catch (Exception) { throw ; } Response.Write( " <script>alert('密码修改成功,请重新登录');location='login.aspx'</script> " ); } }
这里用到了三个方法:
Membership.GetUser(username)用于获取当前用户信息。
GetPassword(passwordAnswer)用于得到当前用户密码。
由于我前面注册的时候,密码提示问题和密码提示答案都设置成"default"(参看前面MemberShip学习之:用户注册),因此这里直接写成u.GetPassword("default")
第三个方法是:ChangePassword(oldpwd, newpwd);
此方法用于密码更新。
这样当前用户的密码就更新好了,并转向到登录页面进行重新登录。这种修改密码的方法很简单,但必须要有两个前提条件:
1、密码以明文方式保存。
2、密码提示问题和密码提示答案,在注册用户的时候由程序员固定设置。
二、密码以密文方式保存
既然密码已经加密,那么从数据库再提取出来比较就不可能了。解密也不可能,但可以利用ResetPassword方法先重新生成一个新密码,然后修改密码。
代码 protected void Button1_Click( object sender, EventArgs e) { String newpwd = Txtpwd.Text.Trim(); MembershipUser u = Membership.GetUser(Context.User.Identity.Name); try { string p = u.ResetPassword("default"); u.ChangePassword(p, newpwd); } catch (Exception) { throw ; } Response.Write( " <script>alert('密码修改成功,请重新登录');location='login.aspx'</script> " ); } }
这里也用到了三种方法:
GeuUser(username);
ResetPassword();
ChangePassword(oldpwd,newpwd);
这样也能修改密码,但也有两个前提条件:
1、EnablePasswordReset的值必须为true;
2、密码提示问题和密码提示答案,在注册用户的时候由程序员固定设置。
转载于:https://www.cnblogs.com/denny402/archive/2010/06/20/1761508.html
相关资源:各显卡算力对照表!