首页> C#>如何找到OldPassword让用户进行更改
作者:互联网
我正在Intranet上工作,我刚刚在用户的个人资料上添加了一项功能来更改其密码.
如您所见,使用以下控制器:
[HttpPost]
public ActionResult ChangePassword(Employee objToEdit, FormCollection form, LocalPasswordModel model) // Find how to obtain "OldPassword" from AccountModel
{
objToEdit.Login = User.Identity.Name;
string name = objToEdit.FirstName;
string pwd = form["NewPassword"];
string confirm = form["ConfirmPassword"];
if (_service.Edit_password(objToEdit, pwd, confirm)) // Checks if NewPassword and ConfirmPassword are the same, and does some syntax checking
{
bool changePasswordSucceeded;
try
{
changePasswordSucceeded = WebSecurity.ResetPassword(WebSecurity.GeneratePasswordResetToken(objToEdit.Login), pwd); // Seems to work
}
catch (Exception)
{
changePasswordSucceeded = false;
}
if (changePasswordSucceeded)
{
return RedirectToAction("Index", new { Message = CRAWebSiteMVC.Controllers.AccountController.ManageMessageId.ChangePasswordSuccess });
}
else
{
ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
}
return new RedirectResult(Url.Action("Index"));
}
return View();
}
到目前为止,用户只需要输入新密码和确认密码即可.我希望添加“输入您的当前密码”功能,但找不到任何方法来检索用户的当前密码!
用户配置文件数据库不再包含“密码”列,如果有帮助,我将使用“表单身份验证”.
编辑:谢谢您的帮助,为解决我的问题,我简单地将ResetPassword行替换为以下内容:
changePasswordSucceeded = WebSecurity.ChangePassword(objToEdit.Login, current, pwd);
如果失败,它将直接显示错误消息,提示当前密码错误.
解决方法:
你不能!
这实际上是一项安全功能.绝对不要以纯文本形式存储密码.
好消息是,您不需要自己进行比较:
而是使用ValidateUser
之类的方法让成员资格提供程序验证所提供的密码.在幕后,此方法将对密码进行哈希处理并将其与数据库中包含的哈希版本进行比较.
编辑:
另外,请注意,由于您使用的是WebSecurity类,因此有一种方法ChangePassword
可以接受当前密码.似乎该方法将检查当前密码是否与指定的currentPassword参数匹配.也许您应该使用此密码而不是ResetPassword
标签:forms-authentication,c,asp-net-mvc 来源: https://codeday.me/bug/20191027/1947631.html