Я унаследовал систему, которая была написана в MVC. Эта система использует API членства asp.net, который работает хорошо. Однако я только что обнаружил ошибку, из-за которой пользователь не может изменить свой пароль.
Система отображает форму для ввода старого пароля и новый пароль дважды для подтверждения, однако при нажатии кнопки «Отправить» она просто отображает форму повторно и не меняет пароль.
Я прошел через код, но, поскольку я достаточно новичок в MVC, и, используя API членства, я не вижу в этом ничего слишком неправильного.
Вот код GET и POST из контроллера аккаунта. Если кто-то может увидеть что-то не так с этим, я был бы очень признателен. Если кому-то понадобится разместить дополнительную информацию / код, пожалуйста, спросите:)
Кроме того, после отладки кода кажется, что после
if (ModelState.IsValid)
Нажатие
, вложенный оператор if в нем пропускается, и код переходит прямо вниз, чтобы снова отобразить форму.
[Authorize]
public ActionResult ChangePassword(string source)
{
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
ViewData["source"] = source;
if (!string.IsNullOrEmpty(source))
{
return View("ChangePassword", source);
}
return View("ChangePassword", "User");
}
[Authorize]
[HttpPost]
public ActionResult ChangePassword(ChangePasswordModel model, FormCollection formValues)
{
string source = formValues["source"];
if (formValues["btnCancel"] != null)
{
RedirectToRouteResult result = null;
// The user has clicked cancel. Redirect back to source!
//
switch (source)
{
case "user":
result = RedirectToAction("Index", "ManageAccount", new { Area = "User" });
break;
case "administrator":
result = RedirectToAction("Index", "ManageAccount", new { Area = "Administrator" });
break;
}
return result;
}
if (ModelState.IsValid)
{
if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword))
{
return RedirectToAction("Index", "ManageAccount", new { Area = "User" });
}
else
{
ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
}
}
// If we got this far, something failed, redisplay form
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
ViewData["source"] = source;
return View("ChangePassword", formValues["source"], model);
}