MemberShip学习之:修改密码

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

 

 

 

 

posted @ 2010-06-20 20:14  denny402  阅读(935)  评论(0编辑  收藏  举报