Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net成员身份在不知道旧密码的情况下更改密码_Asp.net_Asp.net Membership_Forgot Password_Change Password - Fatal编程技术网

asp.net成员身份在不知道旧密码的情况下更改密码

asp.net成员身份在不知道旧密码的情况下更改密码,asp.net,asp.net-membership,forgot-password,change-password,Asp.net,Asp.net Membership,Forgot Password,Change Password,评估方法签名时,需要在更改密码时知道旧密码 membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password) 有没有办法在不知道旧密码的情况下更改密码。您需要在更改密码之前重置用户的密码,并将生成的密码传递到ChangePassword string randompassword = membershipUser.ResetPassword(); membershipUser.ChangePassword(

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

membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password)

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

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

string randompassword = membershipUser.ResetPassword();
membershipUser.ChangePassword(randompassword , userWrapper.Password)
或内联:

membershipUser.ChangePassword(membershipUser.ResetPassword(), userWrapper.Password)

使用要从文本框设置的密码代替123456

 MembershipUser user;     
 user = Membership.GetUser(userName,false);
 user.ChangePassword(user.ResetPassword(),"123456");

尝试使用SimpleMembershipProvider更容易:

var token = WebSecurity.GeneratePasswordResetToken("LoginOfUserToChange");
WebSecurity.ResetPassword(token, "YourNewPassword");

请注意,只有在会员制配置中将
RequiresQuestionAndAnswer
属性设置为false时,上述所有解决方案才有效。如果
RequiresQuestionAndAnswer
为true,则需要向ResetPassword方法传递安全答案,否则它将引发异常


如果您需要将
requiresQuestions和answer
设置为true,您可以使用此

此处的其他答案是正确的,但可以将密码保持在未知状态

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
}
@罗布·丘奇是对的:


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

但是,我将尝试使用ResetPassword from token方法更改密码,并捕获并显示错误,而不是手动执行验证的解决方案:

var user = UserManager.FindByName(User.Identity.Name);
string token = UserManager.GeneratePasswordResetToken(user.Id);
var result = UserManager.ResetPassword(user.Id, token, model.Password);
if (!result.Succeeded){
    // show error
}

上述职位上提到的代码正在运行:

string username = "username";
string password = "newpassword";
MembershipUser mu = Membership.GetUser(username);
mu.ChangePassword(mu.ResetPassword(), password);
但您必须在web.config的成员资格提供者标记中设置requiresQuestionAndAnswer=“false”。如果为true,resetpassword方法将生成一个错误“值不能为null”。 在这种情况下,您必须提供问题答案作为重置密码的参数。

string username=“username”;
string username = "UserName";
string userpassword = "NewPassword";
string resetpassword;
    
MembershipUser mu = Membership.GetUser(username, false);

if (mu == null){
    Response.Write("<script>alert('Invalid Username!')</script>"); 
}

else{
    resetpassword = mu.ResetPassword(username);
    if (resetpassword != null){
         if (mu.ChangePassword(resetpassword, userpassword)){
             Response.Write("<script>alert('Password changed successfully!')</script>"); 
         }
    }
    else{
           Response.Write("<script>alert('Oh some error occurred!')</script>"); 
        }
    }
字符串userpassword=“NewPassword”; 字符串重置密码; MembershipUser mu=Membership.GetUser(用户名,false); if(mu==null){ Write(“警报('Invalid Username!')); } 否则{ resetpassword=mu.resetpassword(用户名); 如果(重置密码!=null){ if(mu.ChangePassword(resetpassword,userpassword)){ 响应。写入(“警报('Password changed successfully!'”); } } 否则{ 写(“警报(‘哦,发生了一些错误’)”); } }
请注意,
enablePasswordReset
选项必须在web.config成员资格提供程序配置中启用为什么不能使用mu.GetPassword();而不是mu.ResetPassword()@RMiranda您可以使用GetPassword,但只有当您在数据库中存储加密密码时,才应该对其进行哈希运算:为什么不能只使用membershipUser.GetPassword();而不是membershipUser.ResetPassword()@RMiranda-因为密码不应该以可检索的方式存储。它们应该被散列。请看,即使在今天,这也是一个有效且有见解的评论(对于我正在处理的遗留代码)。谢谢。这里的主题是使用旧会员资格。但您的代码来自新的Asp.Net标识。:)欢迎来到StackOverflow。请提供一些解释。这是否意味着对您的其他答案进行编辑?使用文章下方的编辑链接并删除此链接。
string username = "UserName";
string userpassword = "NewPassword";
string resetpassword;
    
MembershipUser mu = Membership.GetUser(username, false);

if (mu == null){
    Response.Write("<script>alert('Invalid Username!')</script>"); 
}

else{
    resetpassword = mu.ResetPassword(username);
    if (resetpassword != null){
         if (mu.ChangePassword(resetpassword, userpassword)){
             Response.Write("<script>alert('Password changed successfully!')</script>"); 
         }
    }
    else{
           Response.Write("<script>alert('Oh some error occurred!')</script>"); 
        }
    }
 string username = "UserName";
 string userpassword = "NewPassword";   
 MembershipUser mu = Membership.GetUser(username, false);
 mu.ChangePassword(mu.ResetPassword(username), userpassword);