【问题标题】:Reset Password in ASP.NET MVC在 ASP.NET MVC 中重置密码
【发布时间】:2013-04-06 01:18:43
【问题描述】:

我正在 ASP.NET 中实现我自己的重置密码。在重置密码中,首先我创建一个随机字符串并将其邮寄到用户电子邮件。对于电子邮件中的链接,如http://xyz.com/account/forgot?random=xxxx&userid=xx.I,创建了一个 httpget 类型的操作忘记了,如果验证了 randomid 和 userid,则显示返回带有密码输入标签的视图。 但是在httppost类型的忘记中,我对参数感到困惑。 我忘记了具有 2 个属性密码和确认密码的模型。如果我只是将 forgotmodel 传递给 httppost 操作,那么我无法从数据库中查询用户。我想我应该将 randomId 作为参数传递。但是,我正在了解如何从 httpget 操作的 url 获取 randomID (如果我这样做,它安全吗?)? 请指导我,我被卡住了.. 提前致谢

【问题讨论】:

  • 你在使用 SimpleMembership 吗?
  • 不,我使用的是自定义会员
  • 请显示您卡住的代码(您的 HttpPost 操作和 forgotModel)。
  • 我得到了解决方案...下面的答案

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2


【解决方案1】:

您是否使用类似 Html.BeginForm("action","controller"),如果是这样,那么您将丢失查询字符串参数。由于 ForGotPassword(..) 的 HttpGet 和 HttpPost 方法具有相同的操作名称,您可以只使用 Html.BeginForm()。 因此,表单会将数据发布到页面 url,您将获得查询字符串。

在您的 http post 方法中,您可以定义类似,

    [HttpPost]
    public ActionResult ForGot(ForgotModel model, string random,strung userid)
    {
     :
     :
    }
  • 如果您不想遵循上述方法,则在 httpget 方法中写入 ViewBag/ViewData 并将它们作为隐藏字段放在视图中。然后你可以接收它们作为 Method 的输入。

    [HttpGet]
    public ActionResult ForGot(string random,strung userid)
    {
     ViewBag.Random =random;
     Viewbag.Userid =userid;
     :
     :
    } 
    [HttpPost]
    public ActionResult ForGot(ForgotModel model, string random,strung userid)
    {
     :
     :
    }
    

并且,在视图中

@Html.BeginForm("ForGot","Account"){
:
 @Html.Hidden(ViewBag.Random)
 @Html.Hidden(ViewBag.Userid)
:
}

【讨论】:

  • +1 ,如果您容易将 id 保留在隐藏字段中,您不应该这样做,因为它与您在查询字符串中传递的相同,您也可以使用 Session 变量跨度>
  • @Manas,我不想使用隐藏字段,因为有可疑的攻击。第一种方法可能更好。谢谢
  • 为 post 方法伪造数据并重置任意用户的密码似乎相当简单?
猜你喜欢
  • 2011-03-08
  • 2014-10-07
  • 2018-06-01
  • 1970-01-01
  • 2023-04-07
  • 2013-10-31
  • 2014-04-26
  • 2015-02-28
相关资源
最近更新 更多