1

我正在使用 ASP.NET 4.5 网络表单:我需要用户能够通过电子邮件重置他们的密码(仍在努力)安全问题/答案和使用忘记密码方法

我遇到的问题是,为了使用重置/更改密码方法,我需要将安全问题/答案设置为 false。所以我通过创建一个存储安全问题和答案的表来创建一个解决方法。

当用户正确回答时,除了输入ID 号外,他们还会进入“重置密码”页面。一切都很好,他们可以重置密码并登录。

我的问题: 我需要不公开重置密码页面,有没有办法可以利用用户名,当用户正确回答时,我可以从数据库中获得访问重置页面的权限?

目前任何人都可以访问此 URL。我还在考虑在同一页面而不是 URL 上启用/禁用控件。

感谢您阅读我的长篇故事。

4

1 回答 1

4

为什么不使用 Guid 作为重置凭据令牌;将其保存在数据库(某个表)中的某个位置,然后使用 Guid 作为重置密码页面的查询字符串参数?在 Reset-Pswd 页面中,检查查询字符串中的令牌是否有效。如果不是,请告诉用户,这是一个错误的请求或其他什么。如果不清楚,请告诉我。

在您的登录表单中,在您的 forgot_pswd Click 事件处理程序中使用它。

var resetToken = Guid.NewGuid();

//Code to insert into a table on the db..
//Have a table something like:
//ResetCredentialsToken(UserId int, Token nvarchar(256), IsExpired int)

YourDAL.InsertPwdToken(userId, resetToken, 0);

Response.Redirect("ResetPswd.aspx?Guid=" + resetToken.ToString());

在 ResetPswd.aspx 页面中,检查令牌是否是有效的.. 在 Page_Load

if (!YourDAL.IsValidToken(userId, resetToken))
   showSomething();
于 2013-06-09T08:18:17.803 回答