2012-03-19 112 views
5

我正在使用ASP.NET Membership API。我想强制用户在第一次登录后更改密码。但是,我无法在ASP.NET的Membership API中找到任何此类内置功能。
是否有可能?如果是的话,怎么能轻松完成呢?ASP.NET会员API强制密码更改

+1

http://forums.asp.net/p/1273575/2414481.aspx – 2012-03-19 13:07:54

回答

8

给你,完全测试的解决方案;)

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 
     } 
    } 
} 

如果您需要在如何修改密码帮助,请让我知道。

这篇文章对你有帮助吗,请标记为答案

+1

至于LastPasswordChangedDate财产的替代方案,也可以使用Comment属性(这只是一个自由格式的字符串)来指示用户需要重置他们的密码,以防您的更改密码逻辑并不总是围绕密码更改日期。 – 2013-07-31 02:24:04

0

下面是VB中的解决方案。它还包括用于读取和设置asp:Login ID="LoginUser"表单元素的FindControl。

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

这就是我做到的。最好是在登录后做到这一点。

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"); 
      } 
     } 
    }