我正在使用ASP.NET 4.5 Web表单: 我需要用户能够通过电子邮件重置密码(仍在处理), 安全问题/答案 并使用 忘记密码方法 。
我遇到的问题是,为了使用重置/更改密码方法,我需要将安全问题/答案变为假。所以我通过创建一个存储安全问题和答案的表来创建一个解决方案。
当用户正确回答时,除了输入 ID号 外,他们还会进入“重置密码”页面。一切都很好,他们可以重置密码并登录。
我的问题: 我需要重置密码页面不公开,有没有办法可以利用 用户名 ,我可以在用户正确回答时从数据库中获取,给出访问重置页面?
目前任何人都可以访问此网址。我还想到同一页面上的 启用/禁用 控件,而不是URL。
感谢您阅读我的长篇故事。
答案 0 :(得分:4)
为什么不使用Guid作为重置凭证令牌;将它保存在数据库中的某些位置(某些表),然后使用Guid作为Reset-Password-page的查询字符串参数?在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();