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、密码提示问题和密码提示答案,在注册用户的时候由程序员固定设置。