Не удается войти с новым паролем после сброса с помощью поставщика SqlMembership

После сброса пароля с помощью провайдера SqlMembership. Я не могу войти с новым паролем. Ниже приведена строка кода, используемая для сброса пароля для таблицы dbo.aspnet_Membership. Пароль зашифрован. Каждый раз, когда я сбрасываю пароль, в таблице сохраняется новое зашифрованное значение. Но не получается войти.

Моя настройка веб-конфигурации:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider"    connectionStringName="xxxx" applicationName="xxxx" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" />
  </providers>
</membership>

Код С#:

Membership user= Membership.GetUser(txtUser.Text);
user.ResetPassword(txtNewPassword.Text);

Может ли кто-нибудь помочь мне с этим. Почему я все еще не могу войти с новым паролем?


person Asif Iqbal    schedule 31.10.2014    source источник


Ответы (1)


ResetPassword на самом деле не та функция, которую следует использовать для установки нового пароля пользователя. Видеть:

http://msdn.microsoft.com/en-us/library/d94bdzz2(v=vs.110).aspx

ResetPassword предназначен для создания нового случайного пароля (представьте, что вы забыли пароль). Используемый вами конструктор (строка) предназначен не для нового пароля, а для ответа на секретный вопрос, если он применим.

На самом деле вы должны использовать метод ChangePassword. Видеть:

http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.changepassword(v=vs.110).aspx

Вы бы потребляли это похоже на:

Membership user= Membership.GetUser(txtUser.Text);
user.ChangePassword(oldPasswordString, txtNewPassword.Text);
person Kritner    schedule 31.10.2014
comment
Спасибо за ваш ответ. Но проблема в том, что у меня нет пароля, тогда какое будет решение? Как я могу изменить пароль, не зная старого значения. Даже в таблице aspnet_Membership нет секретного вопроса. Это нулевое значение. - person Asif Iqbal; 03.11.2014
comment
Что ж, вы можете связать методы ResetPassword (он возвращает строку нового установленного пароля), затем ChangePassword, первый аргумент старого пароля передает возвращаемое значение значения сброса. Бум! - person Kritner; 03.11.2014
comment
Он отлично работал в локальном экземпляре. Но когда я тестировал в производстве, он выдает, что учетная запись пользователя заблокирована, хотя значение столбца IsLocked таблицы Aspnet_Membership равно 0. - person Asif Iqbal; 03.11.2014