MVC4制作网站中怎样开发用户密码修改
在MVC4网站开发中,用户密码修改是非常常见的功能之一。当用户想要更改已经设置的密码或者忘记密码的时候,可以通过用户密码修改功能来实现。在本文中,将会介绍如何在MVC4中实现用户密码修改的功能。
一、实现用户密码修改的前置条件
在实现用户密码修改功能之前,需要确保以下条件已经满足:
1. 数据库设计
需要在数据库设计中增加修改密码的功能,并将密码加密存储。
2. 用户授权
用户需要有修改自己密码的权限,可以通过角色授权、控制器或者Action的授权等方式实现。
二、实现用户密码修改
接下来,将介绍在MVC4中如何实现用户密码修改。
1. 创建视图
首先,需要创建一个视图来呈现修改密码的页面。在视图中,需要包含当前用户的用户名、旧密码、新密码以及确认密码的输入框。
@model ChangePasswordViewModel
@{
ViewBag.Title = "Change Password";
}
<h2>@ViewBag.Title.</h2>
@using (Html.BeginForm("ChangePassword", "Account"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Change Password Form</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.OldPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.OldPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NewPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.NewPassword)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ConfirmPassword)
</div>
<div class="editor-field">
@Html.PasswordFor(model => model.ConfirmPassword)
</div>
<p>
<input type="submit" value="Change Password" />
</p>
</fieldset>
}
2. 创建ViewModel
创建一个ViewModel,用来处理用户修改密码时的表单数据。
public class ChangePasswordViewModel
{
[Required]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
public string OldPassword { get; set; }
[Required]
[DataType(DataType.Password)]
public string NewPassword { get; set; }
[Required]
[Compare("NewPassword")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
}
3. 创建控制器
创建一个控制器来处理用户输入数据,进行用户名密码的校验,然后修改用户密码。
[Authorize]
public class AccountController : Controller
{
private UserManager<IdentityUser> UserManager
{
get
{
return HttpContext.GetOwinContext().GetUserManager<UserManager<IdentityUser>>();
}
}
// GET: /Account/ChangePassword
public ActionResult ChangePassword()
{
string userName = User.Identity.Name;
ChangePasswordViewModel model = new ChangePasswordViewModel() { UserName = userName };
return View(model);
}
// POST: /Account/ChangePassword
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
{
if (ModelState.IsValid)
{
IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
}
在控制器中,首先需要使用Authorize特性,确保只有登录的用户才能访问修改密码的功能。
然后,在GET请求中,需要获取当前登录用户的用户名,并初始化ChangePasswordViewModel的实例,然后将其传递到视图中。
在POST请求中,需要验证ModelState是否有效。如果有效,使用UserManager.ChangePasswordAsync()方法来修改用户密码。如果修改成功,则重定向到主页。如果修改失败,则将错误信息添加到ModelState中,然后重新显示修改密码视图。
4. 修改Web.config文件
为了使UserManager.ChangePasswordAsync()方法可以正常工作,需要在Web.config文件中添加以下配置:
<appSettings>
...
<add key="owin:AppStartup" value="MyProject.Startup, MyProject" />
</appSettings>
在Web.config中增加以上配置后,修改密码的功能就已经完成了。
三、总结
通过以上步骤,可以在MVC4中实现用户密码修改的功能。它包括创建视图、创建ViewModel、创建控制器以及修改Web.config文件等步骤。在实现用户密码修改的过程中,需要注意保证代码的安全性和健壮性,为用户提供一个安全、方便的登录体验。
