評估方法簽名時,需要在更改密碼的同時知道舊密碼。asp.net會員在不知道舊密碼的情況下更改密碼
membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password)
有沒有辦法在不知道舊密碼的情況下更改密碼。
評估方法簽名時,需要在更改密碼的同時知道舊密碼。asp.net會員在不知道舊密碼的情況下更改密碼
membershipUser.ChangePassword(userWrapper.OldPassword, userWrapper.Password)
有沒有辦法在不知道舊密碼的情況下更改密碼。
string username = "username";
string password = "newpassword";
MembershipUser mu = Membership.GetUser(username);
mu.ChangePassword(mu.ResetPassword(), password);
在更改密碼之前,您需要重置用戶的密碼,並將生成的密碼傳遞到ChangePassword
。
string randompassword = membershipUser.ResetPassword();
membershipUser.ChangePassword(randompassword , userWrapper.Password)
或內聯:
membershipUser.ChangePassword(membershipUser.ResetPassword(), userWrapper.Password)
爲什麼你不能只使用membershipUser.GetPassword();而不是membershipUser.ResetPassword(); ? – RMiranda 2013-10-24 14:39:14
@RMiranda - 因爲密碼永遠不能以可檢索的方式存儲。他們應該被散列,而不是。請參閱http://msdn.microsoft.com/en-us/library/2x0c6sfa(v=vs.110).aspx和http://en.wikipedia.org/wiki/Cryptographic_hash_function#Password_verification – 2013-10-25 10:45:08
使用要從文本框到位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方法的安全答案,否則會引發異常。
如果你需要RequiresQuestionAndAnswer
設置爲true,則可以使用此workaround
這裏其他的答案是正確的,但也處於未知狀態離開的密碼。
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
}
@Rob教會是正確的:
The other answers here are correct but can leave the password in an unknown state.
然而,而不是他的解決方案做手工驗證,我會努力改變使用ResetPassword從令牌方法和捕獲和密碼顯示錯誤:
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」。如果是,則resetpassword方法會生成一個錯誤「值不能爲空」。 在這種情況下,您必須將問題答案作爲參數提供給ResetPassword。
正在重置是必需的? – Lalit 2011-02-16 08:08:23