asp.net会员更改密码而不知道旧密码

Lal*_*lit 58 asp.net asp.net-membership change-password forgot-password

评估方法签名时,需要在更改密码时知道旧密码.

membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password)
Run Code Online (Sandbox Code Playgroud)

有没有办法在不知道旧密码的情况下更改密码.

ajm*_*jma 112

 string username = "username";
 string password = "newpassword";
 MembershipUser mu = Membership.GetUser(username);
 mu.ChangePassword(mu.ResetPassword(), password);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,必须在web.config成员资格提供程序配置中启用`enablePasswordReset`选项 (13认同)
  • 是否需要重置? (3认同)

Rob*_*rch 23

这里的其他答案是正确的,但可以将密码保留为未知状态.

ChangePassword如果密码不符合Web.Config中规定的要求(最小长度等),将抛出异常.但它只有在ResetPassword被调用后才会失败,因此原始用户或尝试更改密码的人不会知道密码.在更改密码之前检查复杂性要求以避免这种情况:

var user = Membership.GetUser(userName, false);

if ((newPassword.Length >= Membership.MinRequiredPasswordLength) &&
    (newPassword.ToCharArray().Count(c => !Char.IsLetterOrDigit(c)) >=
         Membership.MinRequiredNonAlphanumericCharacters) &&
    ((Membership.PasswordStrengthRegularExpression.Length == 0) ||
         Regex.IsMatch(newPassword, Membership.PasswordStrengthRegularExpression))) {

    user.ChangePassword(user.ResetPassword(), newPassword);
} else {
    // Tell user new password isn't strong enough
}
Run Code Online (Sandbox Code Playgroud)

  • 即使在今天,这是一个有效且富有洞察力的评论(对于我正在研究的遗留代码).谢谢. (2认同)

Geo*_*ord 14

您需要在更改前重置用户密码,并将生成的密码传递给ChangePassword.

string randompassword = membershipUser.ResetPassword();
membershipUser.ChangePassword(randompassword , userWrapper.Password)
Run Code Online (Sandbox Code Playgroud)

或内联:

membershipUser.ChangePassword(membershipUser.ResetPassword(), userWrapper.Password)
Run Code Online (Sandbox Code Playgroud)

  • @RMiranda - 因为密码永远不应该以可检索的方式存储.应该对它们进行哈希处理.请参阅http://msdn.microsoft.com/en-us/library/2x0c6sfa(v=vs.110).aspx和http://en.wikipedia.org/wiki/Cryptographic_hash_function#Password_verification (3认同)