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

  • 相关阅读:
    JUnit中的设计模式:组合模式 Composite
    Activity在屏幕显示的方向切换
    Jenkins插件之有用
    Jenkins插件之Dashboard和wall display
    python技巧32[常用技巧集]
    Jenkins插件之构建与MSBuild
    Jenkins插件之Publish Over SSH/CIFS/FTP
    使用devenv/MSBuild在命令行编译单个project
    Jenkins中执行batch和Python
    python翻译[排序高级]
  • 原文地址:https://www.cnblogs.com/denny402/p/1761508.html
Copyright © 2011-2022 走看看