ASP.NET Forms身份验证,允许用户仅使用用户名访问特定页面

时间:2013-06-09 08:12:20

标签: c# asp.net

我正在使用ASP.NET 4.5 Web表单: 我需要用户能够通过电子邮件重置密码(仍在处理) 安全问题/答案 并使用 忘记密码方法

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

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

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

目前任何人都可以访问此网址。我还想到同一页面上的 启用/禁用 控件,而不是URL。

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

1 个答案:

答案 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();