我有一个ASP.NET应用程序,其中想要向按下“重置密码”按钮的用户发送电子邮件,该按钮重置用户的密码,然后向用户发送一个链接,该用户在按照后将使用新用户登录密码并将其带到“更改密码”页面,他们必须重新密码。
我可以重置密码并获取随机生成的新密码,然后通过电子邮件发回给用户。但是,当用户使用UserName和pw参数跟回链接时,系统似乎没有记录它们,
这是我在load事件上使用的代码似乎不起作用:
try
{
string sUserName = Request.QueryString["UserName"].ToString();
string sPw = Request.QueryString["pw"].ToString();
if (Membership.ValidateUser(sUserName, sPw))
{
//Log the user in???
FormsAuthentication.Authenticate(sUserName, sPw);
}
}
catch (Exception r)
{
string sMessage = r.Message;
}
非常感谢使用用户名和密码参数记录用户的任何帮助。
答案 0 :(得分:0)
您可以使用FormsAuthentication.SetAuthCookie()
:
if (Membership.ValidateUser(sUserName, sPw))
{
FormsAuthentication.SetAuthCookie(sUserName, true);
}
在您的示例代码中,您正在从查询字符串中检索用户名和密码 - 这是非常糟糕的做法,因为任何观察者都会以纯文本形式查看它。至少对这些值使用POST并将它们放在正文中(即使用表单POST),并且至少为您的登录页面使用HTTPS。
答案 1 :(得分:0)
使用以下代码。
if (Membership.ValidateUser(sUserName, sPw))
{
FormsAuthentication.SetAuthCookie(sUserName, true);
Response.Redirect("ChangePassword.aspx");
}
FormsAuthentication.Authenticate
与FormsAuthentication.ValidateUser
几乎相同。他们只是验证用户身份验证SetAuthCookie
创建身份验证票证(登录)。
答案 2 :(得分:0)
这是(IMO)重置密码功能应该如何工作:
您还可以更进一步,为GUID存储过期日期(例如,用户必须在24小时内更改密码)。