ASP.NET MVC 4 认证流程与自定义用户模型

  • MVC 4 认证
  • SimpleMembership、Membership Providers、Universal Providers 以及 ASP.NET 4.5 Web Forms 和ASP.NET MVC4 模板

此外,Scott Allen 在 Pluralsight 上的课程 "Building Applications withASP.NET MVC4" 也非常值得一看。

创建自定义域模型/数据库

首先,将创建自定义域模型/数据库。在 "Model" 目录中,添加一个代表自定义 "User" 表的类。将其称为 "Administrator",如下所示:

namespace SimpleMembershipExample.Models { public class Administrator { public Administrator() {} #region Fields and Properties public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } #endregion } }

然后,将在项目的根目录添加一个自定义的 DbContext,如下所示:

using System.Data.Entity; using SimpleMembershipExample.Models; namespace SimpleMembershipExample { public class SomeAppDbContext : DbContext { public SomeAppDbContext() : base(nameOrConnectionString: "SomeAppName") {} public DbSet<Administrator> Administrators { get; set; } } }

DbContext 仅包含一个名为 Administrators 的表,以保持简单。数据库将包含更多内容。注意在自定义构造函数中,告诉 DbContext 使用特定的连接字符串。让将该连接字符串添加到 Web.Config 中。

自定义MVC 4Internet 模板

移除 InitializeSimpleMembershipAttribute

Internet 模板包含一个名为 InitializeSimpleMembershipAttribute 的 Action 过滤器。删除了这个类并移除了所有引用它的地方。

用自定义用户实体替换 UserProfile

Internet 模板假设它将向数据库中添加一个名为 UserProfile 的用户表。认为大多数开发者想要使用他们自己的域模型的 "user" 实体,并让 SimpleMembership 仅管理密码。让演示如何做到这一点。

在 "Model" 文件夹中,在 AccountModel.cs 文件中,删除 UserProfile 类。想使用 Administrator 实体。在其他地方引用 UserProfile 的地方,用 Administrator 替换。原来的 UserProfile 有 UserName 和 UserId 属性。Administrator 有 Name 和 Id 属性。确保同步这些属性。

想只有一个 DbContext,并且想使用 DbContext。在 "Model" 文件夹中,在 AccountModel.cs 文件中,删除 UsersContext 类。在其他地方引用 UsersContext 的地方,用 SomeAppDbContext 替换。

调用 WebSecurity.InitializeDatabaseConnection

最后,在 Global.asax.cs 中,放入以下代码:

public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { SomeAppDbContext dbcontext = new SomeAppDbContext(); dbcontext.Administrators.All(i => i.Name != "Dan"); WebSecurity.InitializeDatabaseConnection( "SomeAppName", "Administrators", "Id", "Name", autoCreateTables: true); } }

WebSecurity.InitializeDatabaseConnection 接受 web.config 连接字符串名称、自定义用户表的名称("Administrators")、用户表的唯一标识字段名称("Id")和用户名字段。运行 InitializeDatabaseConnection 方法会执行以下操作:

  • 初始化静态 Roles 和 WebSecurity 类。
  • 数据库中添加以下表:webpages_Membership, webpages_OAuthMembership, webpages_Roles, webpages_UsersInRoles, UserProfile。

运行 Internet 应用程序

当运行这些更改后的代码时,将创建以下数据库

主屏幕看起来像这样:

点击右上角的注册链接。填写表单并点击 "注册" 按钮。MVC 4Internet 模板应用程序将引导回到主页。

注意它知道注册的名字。如果检查 cookies,将看到典型的 ASPXAUTH,如下所示:

如果点击 "注销" 链接并检查 cookies,ASPXAUTH cookie 会消失。ASPXAUTH cookie 是认证的关键。

当查看数据库时,将看到以下内容:

注意代码更改后,MVC Internet 模板知道要保存到自定义用户表 "Administrators"。密码保存在 webpages_Membership 表中,与 Administrators 表有外键关系。

如果查看系列文章中的前几篇,Administrator 实体看起来像这样:

using System; using System.Runtime.Serialization; using System.Collections.Generic; namespace LobGame.Model { public class Administrator { public Administrator() { Applications = new List<Application>(); } #region Fields and Properties public Guid Id { get; set; } public string Name { get; set; } public string Password { get; set; } public List<Application> Applications { get; set; } #endregion } } using System; using System.Runtime.Serialization; using System.Collections.Generic; namespace LobGame.Model { public class Administrator { public Administrator() { Applications = new List<Application>(); } #region Fields and Properties public int Id { get; set; } public string Name { get; set; } public string Mobile { get; set; } public List<Application> Applications { get; set; } #endregion } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485