我使用ASP.NET成员资格来验证我的Web应用程序.这对我很有用.我现在必须实现密码到期.
如果密码已过期,则应将用户重定向到ChangePassword
屏幕,并且不允许在不更改密码的情况下访问应用程序的任何其他部分.
有很多aspx页面.如果密码已过期,一种解决方案可能是重定向到每个aspx 的ChangePassword
屏幕OnInit
.有没有其他解决方案或建议.
谢谢,Jai
继csgero的回答之后,我发现您不需要在ASP.Net 2.0(3.5)中为此事件显式添加事件处理程序.
您可以简单地创建以下方法,global.asax
并为您连接:
void Application_PostAuthenticateRequest(object sender, EventArgs e) { if (this.User.Identity.IsAuthenticated) { // get user MembershipUser user = Membership.GetUser(); // has their password expired? if (user != null && user.LastPasswordChangedDate.Date.AddDays(90) < DateTime.Now.Date && !Request.Path.EndsWith("/Account/ChangePassword.aspx")) { Server.Transfer("~/ChangePassword.aspx"); } } }
您可以在global.asax中为HttpApplication.PostAuthenticateRequest事件添加事件处理程序,并在那里处理重定向.
继安德鲁回答之后,我发现你需要检查用户是否已经在更改密码页面上,否则他们将无法真正更改密码,因此永远不会离开更改密码网站:
void Application_PostAuthenticateRequest(object sender, EventArgs e) { if (this.User.Identity.IsAuthenticated) { // get user MembershipUser user = Membership.GetUser(); // has their password expired? if (user != null && user.LastPasswordChangedDate.AddMinutes(30) < DateTime.Now && !Request.Path.EndsWith("/Account/ChangePassword.aspx")) { Server.Transfer("~/Account/ChangePassword.aspx"); } } }
只需在大约一个小时内完成此操作,无需修改基页.你需要做什么:
回应LoggingIn
会员控制事件
在成员资格数据库中找到用户并获取 LastPasswordChangedDate
使用TimeSpan,将其与当前日期进行比较,并确定密码的最后更改时间是否超过必需的天数.我从web.config获取此值
如果已过期,请重定向到ChangePassword
屏幕