如何自定义简单的成员资格提供程序以使用我自己的数据库ASP.NET mvc 4

Imn*_*eek 12 asp.net-mvc membership-provider asp.net-mvc-4 simplemembership

我这几天正在探索ASP.NET MVC 4.如果有人可以回答我的问题,我会很高兴.

我正在建立一个学术项目"项目管理和支持系统".我设计了自己的数据库,我的数据库中有用户自己的表(两种用户:执行任务的员工,分配/雇用任务的客户),我是关于创建一个新的会员提供者但是我意识到"这是浪费时间 - 重新发明轮子".

现在,我正在使用SimpleMembership在ASP.NET MVC4上构建成员模型(这是MVC应用程序的成员服务的未来).它为ASP.NET框架提供了更简洁的成员资格提供程序,并且还支持OAuth.

1-我创建了一个开箱即用的ASP.NET MVC 4 Internet应用程序来自定义登录,注册和用户管理逻辑以维护用户配置文件表.我添加了三个角色:管理员,员工,客户

通过这篇博文,我可以自定义注册 http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-定制用户的属性/

2-现在,我正在将此表与我自己的数据库中的用户表进行同步.考虑到我已经添加了另一个"帐户类型"字段,在注册期间要求用户创建特定的配置文件.

任何帮助非常感谢.

干杯

小智 26

使用SimpleMembership有两种方法可以存储和使用该信息进行身份验证.

  1. 您可以使用默认(UserProfiles)表,即在"DefaultConnection"字符串指向的数据库中.

  2. 您可以使用您的数据库和其中的表作为默认UserProfiles表的替换.

选项1在别处得到了很好的解释.对于选项2,请按照以下步骤操作:假设您的数据库上下文是mDbContext,并且您要用于替换UserProfiles的表是Employees.

  1. 您的员工模型如下所示

    namespace m.Models
    {
      public class Employee
      {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }
        public string UserName { get; set; }
    
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Mobile { get; set; }
        public Designation Designation { get; set; }
        .........
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你的DbContext看起来像这样

    namespace m.Models
    {
        public class mDBContext : DbContext
        {
             DbSet<Employee> Employees { get; set; }
    ......
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您需要告诉WebSecurity使用您的数据库.

    WebSecurity.InitializeDatabaseConnection("mDBContext", 
      "Employees", "ID", "UserName", autoCreateTables: true);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在AccountModels的RegisterModel类中添加其他字段

    public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
    
        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }
    
        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Mobile { get; set; }
        public Designation Designation { get; set; }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 在AccountController Register方法中进行HttpPost替换

    WebSecurity.CreateUserAndAccount(model.UserName, model.
    
    Run Code Online (Sandbox Code Playgroud)

    WebSecurity.CreateUserAndAccount(model.UserName, model.Password, 
      new {  FirstName = model.FirstName, LastName = model.LastName, 
             Mobile = model.Mobile});
    
    Run Code Online (Sandbox Code Playgroud)
  6. 如果挂起任何更改(或添加迁移),则重建和更新数据库.