更改密码时使用参数登录用户

时间:2011-09-14 00:50:52

标签: c# asp.net

我有一个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;
}

非常感谢使用用户名和密码参数记录用户的任何帮助。

3 个答案:

答案 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.AuthenticateFormsAuthentication.ValidateUser几乎相同。他们只是验证用户身份验证SetAuthCookie创建身份验证票证(登录)。

答案 2 :(得分:0)

这是(IMO)重置密码功能应该如何工作:

  • 用户点击“忘记密码”按钮。
  • 在您的代码存储区中,数据库中有一个随机的GUID。
  • 向用户发送电子邮件,其中GUID为电子邮件中的链接,以及用户ID,例如:
  

http://yoursite.com/user/reset?guid=a21312738&userid=213123

  • 在传入页面上,从QS中读取用户ID,然后通过此值从DB中获取用户。
  • 比较QS中GUID存储的GUID。如果成功,则呈现允许用户通过HTTPS POST更改密码的表单。
  • 在POST操作中,更改用户密码并对其进行登录。

您还可以更进一步,为GUID存储过期日期(例如,用户必须在24小时内更改密码)。