Anyone find a resolution? I'm still getting the loop even after installing new Signin.ascx.cs and SkinBase.cs from support.
Everything behaves as expected right after the site has been restarted. The second use of change password begins an endless loop of "you are required to change your password."
When I step through the code (2nd time thru) in ASPDNSFMembershipProvider.cs, I can see that args.Cancel is false and args.Password holds the correct value. That's good. However, when it calls controls/Signin.ascx.cs at Membership_ValidatingPassword, PasswordField retains the incorrect, old value; confirmpwd retains the incorrect, old value; but e.Password contains the correct, new value. Because e.Password is correct but confirmpwd is incorrect, it gets trapped in the IF statement below that sets e.Cancel to true. Once set to true, the loop begins.
Code:
void Membership_ValidatingPassword(object sender, ValidatePasswordEventArgs e)
{
String PasswordField = tbOldPassword.Text;
String confirmpwd = tbNewPassword2.Text;
if (PasswordField == e.Password)
{
lblPwdChgErr.Text = AppLogic.GetString("signin.aspx.30", m_SkinID, ThisCustomer.LocaleSetting);
lblPwdChgErr.Visible = true;
e.Cancel = true;
}
if (e.Password != confirmpwd)
{
lblPwdChgErr.Text = AppLogic.GetString("signin.aspx.32", ThisCustomer.SkinID, ThisCustomer.LocaleSetting);
lblPwdChgErr.Visible = true;
e.Cancel = true;
}
Should these password fields be retaining old values? Membership_ValidatingPassword iterates through all the old passwords used in the current session and finally arrives at the correct password values; but it is too late, since there is no way to change e.Cancel back to false.
It only goes bad on the second (and subsequent) use of change password. Does anyone have ideas about what I could check to ensure these old values get cleared out? (I have verified that Signin.ascx & Signin.ascx.cs, Skinbase.cs, ASPDNSFMembershipProvider.cs, match the 9.013 source.)