2013-04-10 2 views
1

Я хочу знать, как установить пароль с помощью провайдеров mvc4, не зная старый пароль?Webmatrix Сбросить пароль

Я хочу сделать функцию забытого пароля, в которой пользователь получает безопасную ссылку по электронной почте, а затем нажимает на ссылку, направляется в мое приложение, а затем должен заполнять только новый пароль, без каких-либо вопросов безопасности.

Это было легко сделать с поставщиками членства, которые поставлялись с mvc3. Я теперь использую простые поставщики членства, которые поставляются с mvc4, и у меня возникают проблемы с его работой.

код до сих пор выглядит так просто, как:

MembershipUser user = Membership.GetUser(cust.Email); 
       String pass = user.GetPassword(); 

       Boolean success = WebSecurity.ChangePassword(cust.Email, pass, model.Password); 

В настоящее время он дает ошибку на строке выше, что вызывает GetPassword() с ошибкой:

Указанный метод не поддерживается.

Я покажу соответствующий раздел в web.config также здесь:

<system.web> 
     <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
      <providers> 
       <clear/> 
       <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> 
      </providers> 
     </roleManager> 
     <membership defaultProvider="SimpleMembershipProvider"> 
      <providers> 
       <clear/> 
       <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" 
     enablePasswordRetrieval="true" enablePasswordReset="true" passwordFormat="Encrypted" requiresQuestionAndAnswer="false" 
     requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" 
     passwordAttemptWindow="10" /> 
      </providers> 
     </membership> 

Выше я попытался добавить атрибуты, которые вы используете для провайдеров в mvc3, но это не кажется, применимо здесь.

ответ

3

WebSecurity.GeneratePasswordResetToken генерирует и возвращает уникальную строку.

WebSecurity.ResetPassword использует этот токен для изменения пароля.

Дайте пользователю ссылку на действие с токеном в качестве параметра, а затем дайте им простую форму для изменения своего пароля.

+0

Я рад, что это так просто. Я чувствую себя глупо, что не видел этого сам. – John

+0

, что сказал Джон :) Я сбивал с толку методы ConfirmAccount и ResetPassword ... довольно приятно иметь возможность использовать только маркеры (токен, newPassword) и не нужно заботиться ни о чем другом –

+0

Не забудьте добавить секретное поле вопроса также. –