asp.net成员资格:密码哈希时如何检查密码答案是否正确

时间:2014-06-21 11:02:55

标签: asp.net asp.net-membership reset-password

我想仅在用户提供的问题和答案为真时重置用户密码。我使用resetpassword方法和passwordanswer参数。但仍然密码重置,但密码答案是不正确的。 :(

如果用户提供了正确的问题和答案,我该如何重置?  这是我的代码:

try
    {
        MembershipUser user = Membership.GetUser(Membership.GetUserNameByEmail(txtEmail.Text));

        if (user != null)
        {
            if (user.PasswordQuestion == ddlSecurityQuestion.SelectedIndex.ToString())
            {

                user.ChangePassword(user.ResetPassword(txtSecurityQuestionAnswer.Text), txtNewPassword.Text);
                lblError.Text = Resources.Titles.DearUser + user.UserName + Resources.Messages.PasswordRecoveryDone;
            }
            else
            {
                lblError.Text = Resources.Messages.QuestionAnswerIsInvalid;
                return;
            }
        }
        else
        {
            lblError.Text = Resources.Messages.EmailIsInvalid;
            return;
        }
    }
    catch
    {
        lblError.Text = Resources.Messages.QuestionAnswerIsInvalid;

        throw;
    }

但总是重置。当我的密码被破解时,我不知道如何检查密码答案,我无法获得密码。

1 个答案:

答案 0 :(得分:0)

我发现我的重置方法有什么问题。我在web.config中将requiresQuestionAndAnswer设置为false。当此选项设置为false时,使用PasswordAnswer工作重置方法然而提供的答案是错误的。 当我将requiresQuestionAndAnswer更改为true时,如果回答错误,则此方法会抛出异常。