2008-11-13 17 views
57

problema, no hay ningún método:¿Cómo se puede cambiar una contraseña hash utilizando el proveedor de membresía asp.net si no se conoce la contraseña actual?

bool ChangePassword(string newPassword); 

Usted tiene que saber la contraseña actual (que probablemente se hash y olvidado).

+0

debe separar su pregunta y agregar una respuesta. –

+0

@mcqwerty, ahora que hemos separado su respuesta, debe "aceptar" su propia respuesta – harriyott

+0

Buen trabajo, lo hice con nuestra versión del control ChangePassword (contraseña de administrador para los usuarios);) – CheGueVerra

Respuesta

126

Este es uno fácil en el que perdí demasiado tiempo. Espero que este mensaje le ahorre a otra persona el dolor de golpearse la frente tan duro como yo.

Solución, restablecer la contraseña aleatoriamente y pasarla al método de cambio.

MembershipUser u = Membership.GetUser(); 
u.ChangePassword(u.ResetPassword(), "myAwesomePassword"); 
+2

Hola, vamos. No degrade por responder su propia pregunta. La pregunta frecuente alienta eso. Ver http://stackoverflow.com/questions/18557/how-does-stackoverflow-work-the-unofficial-faq#119658 – DOK

+0

El voto abajo (¡no yo!) Era antes de que la respuesta se trasladara aquí. Anteriormente decía que la respuesta estaba en la pregunta. No estoy muy interesado en votar negativamente a personas que acaban de unirse a SO, es mucho mejor editar para ayudar. – harriyott

+0

¡Sí, y también recibe la bonita insignia! – CheGueVerra

2

No son capaces de cambiar la contraseña si el requiresQuestionAndAnswer = "true"

me dieron el trabajo en torno a este

Creado dos proveedores de pertenencia en web.config

estoy usando el proveedor AspNetSqlMembershipProviderReset para restablecer la contraseña ya que tiene la requiresQuestionAndAnswer = false donde AspNetSqlMembershipProvider es el proveedor predeterminado utilizado.

escribí el siguiente código para restablecer la contraseña para el usuario.

ResetUserPassword public bool (String psUserName, Cadena psNewPassword) { tratar { // obtener los detalles del usuario de suscripción mediante proveedor de pertenencia secound con la respuesta de las preguntas requerida se pone a falso.

 MembershipUser currentUser = Membership.Providers["AspNetSqlMembershipProviderReset"].GetUser(psUserName,false); 

     //Reset the user password. 
     String vsResetPassword = currentUser.ResetPassword();    

     //Change the User password with the required password    
     currentUser.ChangePassword(vsResetPassword, psNewPassword); 
     //Changed the comments to to force the user to change the password on next login attempt 
     currentUser.Comment = "CHANGEPASS"; 
     //Check if the user is locked out and if yes unlock the user 
     if (currentUser.IsLockedOut == true) 
     { 
      currentUser.UnlockUser(); 
     } 
     Membership.Providers["AspNetSqlMembershipProviderReset"].UpdateUser(currentUser);   return true; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
     return false; 
    } 
} 
Cuestiones relacionadas