添加一个带有使用窗体身份验证的帐户控制器的默认 ASP.NET MVC 4 项目,如果用codefirst会自动生成几张表。
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=WebSecurity;Persist Security Info=True;User ID=sa;Password=1q2w3e4r" providerName="System.Data.SqlClient" /> </connectionStrings>
public class EntityContext : DbContext { public EntityContext() : base("DefaultConnection") { } public DbSet<UserProfile> UserProfiles { get; set; } //protected override void OnModelCreating(DbModelBuilder modelBuilder) //{ // base.OnModelCreating(modelBuilder); // modelBuilder.Entity<UserProfile>().ToTable(""); //} }
数据库生成5张表:
UserProfile、webpages_Membership、webpages_OAuthMembership、webpages_Roles、webpages_UsersInRoles
注册用户
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { // 尝试注册用户 try { //创建用户 WebSecurity.CreateUserAndAccount(model.UserName, model.Password); //创建角色 if (!Roles.RoleExists("superAdmin")) {Roles.CreateRole("superAdmin"); } if (!Roles.RoleExists("admin")) { Roles.CreateRole("admin"); } if (!Roles.RoleExists("user")) { Roles.CreateRole("user"); } //将用户添加到角色 Roles.AddUserToRole(model.UserName, "user"); var id = WebSecurity.GetUserId(model.UserName); WebSecurity.Login(model.UserName, model.Password); return RedirectToAction("Index", "Home"); } catch (MembershipCreateUserException e) { ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); } } // 如果我们进行到这一步时某个地方出错,则重新显示表单 return View(model); }
这样除了第三张表都有了数据,OAuthMembership表有三个字段Provider、ProviderUserId、UserId,应该和验证方式的配置有关。