2008-02-14 16:10

Membership中要修改密码,真是很麻烦,还要提供原密码或者密码保护的问题,不知道老外是如何想的,也许是微软太注重安全了吧,不过这就对我们造成了麻烦,客户的密码忘了,让我们在后台给修改下,我们还要知道客户的原密码或者密码保护的问题才能修改,这个现实生活中不太好办。
没办法,自己手动解决啦:
办法1:用Membership里的ResetPassword ()方法。
      思想:
        这个函数可以将用户密码重置为一个自动生成的新密码,我们可以通过这个方法来获取用户的新密码,然后接合ChangePassword()方法就可以修改用户的密码了。
        实现:
       修改密码:
MembershipUser mymem = Membership.GetUser(uname);//uname为要修改用户的帐号
string p = mymem.ResetPassword();//将用户密码重置为一个自动生成的新密码
mymem.ChangePassword(p, "www.cn-web.com");//修改用户密码为http://www.cn-web.com/

注意:
因为我们用了ResetPassword()方法,这个方法重载两次,如果用的是没有参数的重载,就需要修改web.config文件内关于对membership的配置。
将enablePasswordReset属于置为true,requiresQuestionAndAnswer属性置为false,如果置为true,则ResetPassword()需要用另一种重载方式,即需要输入用户的密码答案才行,(系统管理员不可能去破解用户的密码答案去吧,这个可是加密的),所以requiresQuestionAndAnswer属性必需置为false,这就意味着系统中不能用通过密码提示问题和答案来找回密码的功能了。
晕之,上述此种方法有限制,只适合于系统中不用“通过用户的密码提示问题和答案找回密码”的功能的情况下才适合,下面再说一个通用点的办法来解决Membership如何修改密码的问题。

办法2:用自定义的密码去替换用户的密码然后再用ChangePassword修改。
思想:
ChangePassword函数需要提供旧密码才能修改,如果我们知道用户的旧密码就可以了,办法1中可以将用户的密码重置,然后得到用户密码,这样就可以修改了,但是重置用户的密码有使用限制。怎么样我们才能得到用户的旧密码呢(不可能去暴力破解),我们可以这样,在用户修改密码之前,将用户的密码修改为一个已知的密码,然后通过这个已知的密码再用ChangePassword函数去修改。
可能听起来有点晕,看实现:
实现:
       修改密码:
MembershipUser mymem = Membership.GetUser(uname);//uname为要修改用户的帐号
UpdatePwd(uname);;//将用户密码重置为一个我们已经的一个密码,我这里为laohan
mymem.ChangePassword("laohan", "www.cn-web.com");//用户旧密码为laohan,这时就可以修改用户密码为http://www.cn-web.com/

UpdatePwd方法的实现
   /// <summary>
       /// 更新密码
       /// </summary>
       public void UpdatePwd(string uname)
       {
           int rowsAffected;
           SqlParameter[] parameters = {
     new SqlParameter("@ApplicationName", SqlDbType.NVarChar,256),
     new SqlParameter("@UserName", SqlDbType.NVarChar,256),
     new SqlParameter("@NewPassword", SqlDbType.NVarChar,128),
     new SqlParameter("@PasswordSalt", SqlDbType.NVarChar,128),
     new SqlParameter("@CurrentTimeUtc", SqlDbType.DateTime),
     new SqlParameter("@PasswordFormat", SqlDbType.Int)};
           parameters[0].Value = "cn_web.com";//您的应用程序名字,如何查看这个名字请参考下附1
           parameters[1].Value = uname;//要修改用户的帐号
           parameters[2].Value = "081i356xYjAmZI+mqvCoKOix9g4=";//这里是laohan的加密码密码,参考附2
           parameters[3].Value = "3I6t4j5h/vxnhNgYIe7oiw==";//每个密码对应的PasswordSalt对不同,可以查参考附2           parameters[4].Value = DateTime.Now;
           parameters[5].Value = 1;
DbHelperSQL.RunProcedure("aspnet_Membership_SetPassword", parameters, out rowsAffected);//注意,RunProcedure是我自己定义的执行存储过程的方法,您在这里要替换为您自己的方法,aspnet_Membership_SetPassword是启用Membership后自动在数据库中生成的修改密码的存储过程.
       }

附1获取当前系统的应用程序名字:
打开sqlserver中表aspnet_Applications,如图就可以看到您当前系统的ApplicationName了,可以自定义:

附2获取公共密码的字串:
我这里公共密码为laohan,我就先注册一个帐户,密码为laohan,然后打开sqlserver中表aspnet_Users查看该帐户的userid

得到用户的userid后,再打开sqlserver中表aspnet_Membership,查看对应该密码的Password字段值和PasswordSalt字段值

2.Forget Password

MembershipUser user = Membership.GetUser(userName);
        bool value = false;
        try
        {
            value = user.ChangePassword(user.ResetPassword(Server.HtmlEncode(this.txtAnswer.Text)), this.txtNewPwd.Text);
        }
        catch(Exception ex)
        {
            this.lblErrorInfo.Text = ex.Message ;

}   这里注意web.config中的,requiresQuestionAndAnswer属性置为true,否则答案正确错误就没有关系都可以改的。

将enablePasswordReset属于置为true,requiresQuestionAndAnswer属性置为false,如果置为true,则ResetPassword()需要用另一种重载方式,即需要输入用户的密码答案才行,(系统管理员不可能去破解用户的密码答案去吧,这个可是加密的),所以requiresQuestionAndAnswer属性必需置为false,这就意味着系统中不能用通过密码提示问题和答案来找回密码的功能了

转载于:https://www.cnblogs.com/tinachang021/archive/2008/07/17/1245281.html

如何在Membership中实现修改密码的功能相关推荐

  1. linux中更改用户密码_如何在Linux中更改用户密码

    linux中更改用户密码 In this tutorial, we will focus on how you can change a user's password in Linux. We wi ...

  2. element 搜索匹配_如何在Element-ui中实现一个远程搜索功能

    如何在Element-ui中实现一个远程搜索功能 发布时间:2021-01-29 14:50:00 来源:亿速云 阅读:87 作者:Leah 这篇文章给大家介绍如何在Element-ui中实现一个远程 ...

  3. 如何在latex中使用python及pythontex功能简介

    如何在latex中使用python及pythontex功能简介 这是我在latexstudio写的文章. 请直接看: [如何在latex中使用python及pythontex功能简介]

  4. ubtun服务器如何修改密码,如何在Ubuntu中更改root密码

    root用户(或超级用户)是在所有Linux和Unix的系统上都存在的特殊用户.它具有对系统上的每个命令和任何资源的完全访问权限,而没有任何限制. 在Ubuntu系统中,默认情况下基于安全原因root ...

  5. 如何在Ubuntu中更改用户密码

    转于:https://www.linuxidc.com/Linux/2019-04/158285.htm 在这篇简短的文章中,我们将向您展示如何使用图形界面和命令行界面在Ubuntu Linux中更改 ...

  6. linux更改root密码_如何在Linux中更改root密码

    linux更改root密码 Let's go over the simple commands to change the root password in Linux. Linux root ref ...

  7. 如何在PHP中保护数据库密码?

    当PHP应用程序建立数据库连接时,通常当然需要传递登录名和密码. 如果我为我的应用程序使用单个最小权限登录名,则PHP需要在某个地方知道该登录名和密码. 保护该密码的最佳方法是什么? 似乎只在PHP代 ...

  8. Centos中mysql修改密码策略并修改密码

    1.获取初始密码 vim /var/log/mysqld.log 2.修改密码 (注:只有修改初始密码后才可以进行下一步操作) ALTER USER 'root'@'localhost' IDENTI ...

  9. 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...

    很高兴CAS系列帮助到了不少小伙伴,有不少小伙伴加QQ跟我交流 有个比较普遍的问题是大家不知道怎么把注册,修改密码等相关的功能嵌入CAS,这篇博客统一解答下,有些关于spring的内容是我查找资料结合 ...

最新文章

  1. js倒计时天时分秒php,JS制作分秒倒计时器
  2. Java开发学习必须了解的基础知识点
  3. mysql的安全管理_MySQL安全管理
  4. Qt Package Project 打包发布程序
  5. 基于Qt语音识别功能
  6. springboot mybatis常见异常及处理方法
  7. PHP基础知识之文件加载
  8. selenium IDE下载及使用
  9. STM32学习——矩阵键盘
  10. LED的基本操作(138译码器 573锁存器)
  11. JSP+实验室设备管理 毕业设计-附源码191409
  12. div css切图在线
  13. Matplotlib饼图实例
  14. DP 转 HDMI视频信号转换 CS5263替代IT6563
  15. 微信公众平台开发最佳实践(第2版)
  16. 人工智能相关技术的快速发展,主要带来了哪些价值优势?
  17. 威尔逊定理公式的理解
  18. kafka消息过期时间设置(全局和特定topic)
  19. 计算机无法共享的原因,文件夹无法共享的原因及其解决办法
  20. 大学获奖范文,围绕主题我的大学梦进行阐述

热门文章

  1. 需求又变了,要不要怼回去?
  2. 线程同步:Condition
  3. 【Python】青少年蓝桥杯_每日一题_1.03_输出字符串
  4. Android --- android.view.InflateException: Binary XML file line #7: Binary XML file lin... 类似问题的解决办法
  5. python 下载图片损坏_爬虫爬取出的图片下载出错,图片文件直接损坏
  6. linux内核配置失败,petalinux配置内核出现下面错误
  7. qt通过蓝牙控制单片机_ST发布新款STM32WB55单片机,集成蓝牙5和802.15.4协议...
  8. 如何利用传感器控制数据中心能耗
  9. python入门之控制结构-循环结构_Python 入门之控制结构 - 循环结构(一)
  10. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法