asp.net пароль для сброса членства не работает

#asp.net #hash #membership #reset-password

#asp.net #хэш #членство #сброс пароля

Вопрос:

когда я хочу использовать ResetPassword метод в vb.net или c #, он не может сбросить пароль и сделать исключение, в котором говорится: «Предоставленный ответ на пароль неверен». я думаю, что это вызвано системой хеширования и машинным кодом хэша и соли. как я могу решить эту проблему?

Ответ №1:

добавьте следующий атрибут в раздел cofig вашего членства в вашем файле Web.Config.

 requiresQuestionAndAnswer="false"
  

полный пример

 <configuration>
    <connectionStrings>
        <add name="SqlServices" 
             connectionString="Data Source=MySqlServer;Integrated Security=SSPI;Initial 
             Catalog=aspnetdb;" />
    </connectionStrings>
    <system.web>
        <membership 
             defaultProvider="SqlProvider"
             userIsOnlineTimeWindow="20">
             <providers>
                <remove name="AspNetSqlProvider" />
                <add name="SqlProvider"
                    type="System.Web.Security.SqlMembershipProvider"
                    connectionStringName="SqlServices"
                    enablePasswordRetrieval="false"
                    enablePasswordReset="true"
                    requiresQuestionAndAnswer="false"
                    passwordFormat="Hashed"
                    applicationName="/" />
            </providers>
        </membership>
    </system.web>
</configuration>
  

Комментарии:

1. но я хочу использовать вопрос о пароле

2. задавали ли вы вопрос и ответ, когда создавали пользователя с помощью msdn.microsoft.com/en-us/library /… способ

Ответ №2:

Я использовал его неправильно и получил ту же ошибку, надеюсь, вам это тоже поможет. Это мой код:

 MembershipUser mu = Membership.GetUser(c.Username);

if (mu.PasswordQuestion == c.Question)
{
    string pwd = mu.ResetPassword(c.Answer);
    mu.ChangePassword(pwd, c.Password);

    return RedirectToAction("SignIn");
}

else
{
    ViewBag.Message = "Error!";
    return View();
}