[翻译]ASP.NET MVC 3 开发20例(一)[20 Recipes for Programming MVC 3]:通过密码验
议题
创建用户必须注册并通过用户名和密码登录才能访问的网站的特定页面。
创建具有权限控制的特定页面,用户必须通过注册并使用用户名和密码登录才能访问。
解决方案
AccountController和AccountModels以及几个验证视图通过Membership和FormsAuthentication来实现创建和验证用户的功能。在ASP.NET中通过AuthorizeAttribute控制访问权限。
讨论
微软的ASP.NET MVC团队针对AccountController做出很多改进,更新了FormsAuthentication类,通过Membership对象创建新用户、验证现有的用户创建Cookie并通过这个对象来检查用户状态。
与MVC 2不同,在第三版中,更新了“新建项目”的对话框,提供三种不同应用程序类型:空应用程序,互联网应用程序,内网应用程序。一个空的应用程序只在项目中创建 MVC所必须的文件夹结构。Internet应用程序,设置默认的模板,将创建和预配置的几个功能,包括一个基本的布局模板,以及通过AccountController进行用户注册、登录的MVC的应用程序。第三个模板是Intranet应用程序,与Internet应用程序不同,并没有使用Membership类进行验证而是使用Windows身份验证方式。
对大多数网站来说,使用默认的Internet应用程序即可。创建一个新的MVC3的Internet应用,将会产生AccountController、AccountModels和几个关于用户账号的视图,包含关于用户注册、登录、修改密码的视图。
为了防止用户访问某些页面,MVC在一些特定的Controller和Action上通过AuthorizeAttribute来控制访问。打开AcctionController.cs 我们会看到以下内容:
//
// GET: /Account/ChangePassword
[Authorize]
public ActionResult ChangePassword()
{
return View();
}
当未注册用户通过 /Account/ChangePassword 来访问的时候,MVC是自动跳转到登录页面。如果他们已经登录,就不会重定向页面,而会显示视图内容。默认重定向的用户登录地址可以在Web.Config文件中设置:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
假如用户之前从未注册过,最后将转入注册页面。默认注册时需要收集以下信息:
l 登录用户名
l 电子邮件地址
l 登录密码
AccountController中的Register方法通过Membership来创建新的用户账户。Register方法的输入参数为RegisterModel类型对象。针对页面的注册表单,我们在AccountModels定义了一个名为RegisterModel的对象。
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// 尝试注册用户
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password
, model.Email, null, null, true, null, out createStatus);
补充:Web开发 , ASP.Net ,