2012-03-19 25 views
5

Uso la API de membresía de ASP.NET. Quiero forzar al usuario a cambiar su contraseña después de la primera vez que inicia sesión. Sin embargo, no pude encontrar ninguna funcionalidad integrada en la API de Membresía de ASP.NET.
¿Es posible o no? Si es así, ¿cómo se puede hacer fácilmente?API de membresía de ASP.NET forzar el cambio de contraseña

+1

http://forums.asp.net/p/1273575/2414481.aspx –

Respuesta

8

Aquí tiene, una solución totalmente probada;)

protected void LoginButton_Click(object sender, EventArgs e) 
{ 
    /****note: UserName and Password are textbox fields****/ 

    if (Membership.ValidateUser(UserName.Text, Password.Text)) 
    { 
     MembershipUser user = Membership.GetUser(UserName.Text); 
     if (user == null) 
     { 
      FailureText.Text = "Invalid username. Please try again."; 
      return; 
     } 
     if (user.IsLockedOut) 
      user.UnlockUser(); 

     /* this is the interesting part for you */ 
     if (user.LastPasswordChangedDate == user.CreationDate) //if true, that means user never changed their password before 
     { 
      //TODO: add your change password logic here 
     } 
    } 
} 

En caso de que necesite ayuda en la forma de cambiar la contraseña, por favor hágamelo saber.

caso de este post estar en cualquier ayuda para usted, por favor etiquetar como respuesta

+1

Como alternativa a la propiedad LastPasswordChangedDate, también se puede utilizar la propiedad Comentarios (que es solo una cadena de forma libre) para indicar que los usuarios necesitan el restablecimiento de sus contraseñas, en caso de que su lógica de cambio de contraseña no siempre gire en torno a las fechas de cambio de contraseña. –

0

A continuación se muestra la solución en VB. También incluye FindControl para leer y configurar los elementos de formulario asp:Login ID="LoginUser".

Protected Sub LoginButton_Click(sender As Object, e As EventArgs) 

    '***note: UserName and Password are textbox fields*** 
    Dim UserName As TextBox = DirectCast(LoginUser.FindControl("UserName"), TextBox) 
    Dim Password As TextBox = DirectCast(LoginUser.FindControl("Password"), TextBox) 
    Dim FailureText As Literal = DirectCast(LoginUser.FindControl("FailureText"), Literal) 

    If Membership.ValidateUser(UserName.Text, Password.Text) Then 
     Dim user As MembershipUser = Membership.GetUser(UserName.Text) 
     If user Is Nothing Then 
      FailureText.Text = "Invalid username. Please try again." 
      Return 
     End If 
     If user.IsLockedOut Then 
      user.UnlockUser() 
     End If 

     ' this is the interesting part for you 

     If user.LastPasswordChangedDate = user.CreationDate Then 
      'TODO: add your change password logic here 
     End If 
    End If 
End Sub 
0

Así es como lo hice. Es mejor hacerlo después de iniciar sesión.

protected void LoginUser_LoggedIn(object sender, EventArgs e) 
    { 

     if (Membership.ValidateUser(this.LoginUser.UserName, this.LoginUser.Password)) 
     { 
      MembershipUser user = Membership.GetUser(this.LoginUser.UserName); 
      if (user == null) 
      { 
       this.LoginUser.FailureText = "Invalid username. Please try again."; 
       return; 
      } 
      if (user.IsLockedOut) 
      { 
       user.UnlockUser(); 
      } 

      if (user.LastPasswordChangedDate == user.CreationDate) //if true, that means user never changed their password before 
      { 
       Response.Redirect("~/Account/ChangePassword.aspx"); 
      } 
     } 
    } 
Cuestiones relacionadas