我有一个运行DNN 7.04.00(353)的DNN站点。我无法在我的网站上重置密码。如果我使用内置密码重置功能,我可以收到带有链接的密码重置电子邮件。我点击链接,输入我的电子邮件地址和新密码。无论我做什么,我都会收到错误消息,并且出于安全原因,不会接受您的新密码。请确保选择的密码与以前使用的密码不匹配,并且密码足够复杂,足以满足网站密码复杂性要求。"
这里有什么奇怪的,我正在输入一个以前从未使用过的强密码。当我这样做时,我可以看到以下事情发生:
无论我的密码是什么都未被接受,但它存储在PasswordHistory表中。有谁知道是什么原因引起的?一些可能有用的注释:
感谢您的帮助。
答案 0 :(得分:1)
查看核心代码(UserController.ChangePasswordByToken()),似乎在密码验证之前进行了密码历史记录检查。历史记录检查还会将尝试的密码添加到历史记录中。因此,如果您的密码不符合验证规则,它可能会将其添加到历史记录中而不会更改它。
在主机中>主机设置>高级设置>会员管理,您可以通过取消选中“启用密码历史记录”来禁用历史记录。
但是你需要专注于密码验证,因为它似乎失败了。它由web.config中的AspNetSqlMembershipProvider的三个属性组成:
如您所述,passwordStrengthRegularExpression为空或缺失,因此不应该引起关注。确保输入的密码符合minRequiredPasswordLength中的最小字符长度,并包含minRequiredNonalphanumericCharacters所需的非字母数字字符数。
以下是我用来注册新用户的一段代码:
newUser = new UserInfo();
newUser.PortalID = this.PortalId;
newUser.IsSuperUser = false;
newUser.FirstName = txtFirstName.Text;
newUser.LastName = txtLastName.Text;
newUser.DisplayName = txtFirstName.Text + " " + txtLastName.Text;
newUser.Email = txtEmailAddress.Text.Trim();
newUser.Username = txtEmailAddress.Text.Trim();
newUser.LastIPAddress = Request.UserHostAddress;
newUser.Profile.ProfileProperties["CompanyName"].PropertyValue = txtCompanyName.Text;
newUser.Profile.ProfileProperties["AddressLine1"].PropertyValue = txtAddressLine1.Text;
newUser.Profile.ProfileProperties["AddressLine2"].PropertyValue = txtAddressLine2.Text;
newUser.Profile.City = txtCity.Text;
newUser.Profile.ProfileProperties["State"].PropertyValue = ddlState.SelectedValue;
newUser.Profile.PostalCode = wmeZipCode.Text.Trim().TrimEnd('-');
newUser.Profile.Telephone = wmePhoneNumber.Text;
if (lblWmePhoneNumberExtension.Text.Trim().CompareTo(String.Empty) != 0) { newUser.Profile.ProfileProperties["TelephoneExtension"].PropertyValue = wmePhoneNumberExtension.Text; }
var newMembership = new UserMembership(newUser);
newMembership.Approved = true;
newMembership.CreatedDate = DateTime.Now;
newMembership.IsOnLine = false;
newMembership.Password = txtPassword.Text;
newMembership.PasswordQuestion = ddlSecurityQuestion.SelectedValue;
newMembership.PasswordAnswer = txtSecurityQuestionAnswer.Text;
newUser.Membership = newMembership;
UserCreateStatus userStatus = membershipProvider.CreateUser(ref newUser);