【发布时间】:2014-05-05 12:45:55
【问题描述】:
在我的应用程序中,我试图让忘记密码才能工作。当用户输入他或她的用户名,发送他们和电子邮件时,我试图向用户发送一封电子邮件,他们点击该链接,并被带回网站并更改他们的密码。唯一的问题是我的 linq 查询错误,没有检查用户名是否存在于数据库中。这是通过忘记密码来工作的正确方法吗?
这是我的代码
控制器
// GET: /Account/ForgotPassword
[AllowAnonymous]
public ActionResult ForgetPassword()
{
return View();
}
// Post: /Account/ForgotPassword
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ForgetPassword(ForgetPasswordModel model, string UserName)
{
string emailAddress = (from i in db.UserProfiles
where i.UserName.Equals(model.Username)
select i.Email).Single();
if (!string.IsNullOrEmpty(emailAddress))
{
string confirmationToken =
WebSecurity.GeneratePasswordResetToken(model.Username);
dynamic email = new Email("ChngPasswordEmail");
email.To = emailAddress;
email.UserName = model.Username;
email.ConfirmationToken = confirmationToken;
email.Send();
return RedirectToAction("ResetPwStepTwo");
}
return RedirectToAction("InvalidUserName");
}
型号
public class ForgetPasswordModel
{
[Required]
[Display(Name = "Username")]
public string Username { get; set; }
}
查看
@model MyFestival.Models.UserProfile
@{
ViewBag.Title = "Forgot Password";
}
<hr />
<div class="form-group">
<h3 class="panel-title">Did you forget your password?</h3>
</div>
@using (Html.BeginForm())
{
<div class="">
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, null, new { @style = "color:red;" })
<hr />
<label>To reset your password, input your email address and press the Reset Password button.</label>
<br/>
<div class="form-group" >
<div class="col-md-12" >
<div class="input-group">
<span class="input-group-addon" ><i class="glyphicon glyphicon-user" ></i ></span >
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @placeholder = "Username" })
</div >
@Html.ValidationMessageFor(m => m.UserName, null, new { @style = "color:red;" })
</div>
</div>
<br/>
<br/>
<div class="form-group" >
<div class="col-md-offset-2 col-md-10" >
<input type="submit" class="btn btn-default" value="Reset Password"/ >
@Html.ActionLink("Back to Login", "Login", null, new { @class = "btn btn-info" })
</div >
</div>
</div>
}
【问题讨论】:
-
目前发生了什么??
-
然后创建一个查询来检查用户名是否存在?
-
说到这里:
string emailAddress = (from i in db.UserProfiles where i.UserName.Equals(model.Username) select i.Email).Single();例如,我使用我的用户名,它不会检查用户名是否存在于数据库中。并告诉我我的用户名在数据库中不存在,它确实存在。 -
如果数据库中不存在电子邮件地址,它将
RedirectToAction("InvalidUserName");,这是所需的。据我了解,这就是您想要的,对吧? -
您能否澄清一下您的解决方案到底出了什么问题?检查用户名是否存在的查询?如果是,您可以尝试分析您的 ORM 生成的 SQL 查询。此外,使用
Equals的另一个重载可能很有用:i.UserName.Equals(model.Username, StringComparison.InvariantCultureIgnoreCase)。
标签: c# asp.net-mvc linq