评估方法签名时,需要在更改密码的同时知道旧密码。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