0

我正在处理表单Authnetication,我已经使用了我自己的实体框架,并且还使用了DataContext来为用户提供角色。我已经硬编码了DataCOntectInitializer如下实体框架启用迁移-EnableAutomaticMigrations?

公共类DataContextInitializer:CreateDatabaseIfNotExists { 保护覆盖无效的种子(DataContext的情况下) { 角色role1上=新角色{ROLENAME = “联系”}; 角色role2 =新角色{RoleName =“User”};

 User user1 = new User { Username = "admin", EmailId = "[email protected]", FirstName = "Admin", Password = "123456", IsActive = true, DateCreated = DateTime.UtcNow, Roles = new List<Roles>() }; 

     User user2 = new User { Username = "user1", EmailId = "[email protected]", FirstName = "User1", Password = "123456", IsActive = true, DateCreated = DateTime.UtcNow, Roles = new List<Roles>() }; 

     user1.Roles.Add(role1); 
     user2.Roles.Add(role2); 

     context.Users.Add(user1); 
     context.Users.Add(user2); 

     context.SaveChanges(); 
    } 
} 

我的登录方法是:

[HttpPost] [使用AllowAnonymous]

public ActionResult Login(LoginViewModel model, string returnUrl=" ") 
    { 
     if (ModelState.IsValid) 
     { 
      var user1 = Context.Users.Where(u => u.Username == model.Username && u.Password == model.Password).FirstOrDefault(); 
      var user = ob.Users.Where(u => u.Username == model.Username && u.Password == model.Password).FirstOrDefault(); 
      if (user != null) 
      { 
       var roles = user.Roles.Select(m => m.RoleName).ToArray(); 
       CustomPrincipalSerializeModel serializeModel = new CustomPrincipalSerializeModel(); 
       serializeModel.UserId = user.UserId; 
       serializeModel.FirstName = user.FirstName; 
       serializeModel.LastName = user.LastName; 
       serializeModel.roles = roles; 


       string userData = JsonConvert.SerializeObject(serializeModel); 
       FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, user1.EmailId, DateTime.Now, DateTime.Now.AddMinutes(15), false, userData); 

       string encTicket = FormsAuthentication.Encrypt(authTicket); 
       HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); 
       Response.Cookies.Add(faCookie); 
       if (roles.Contains("Admin")) 
       { 
        return RedirectToAction("Index", "Admin"); 
       } 
       else if (roles.Contains("User")) 
       { 
        return RedirectToAction("Index", "User"); 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
      } 

     } 
     // If we got this far, something failed, redisplay form 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
     return View(model); 
    } 

我的模型类,如下:

公共类用户 {

public int UserId { get; set; } 
    [Required] 
    public String Username { get; set; } 
    [Required] 
    public String EmailId { get; set; } 

    [Required] 
    public String Password { get; set; } 

    public String FirstName { get; set; } 
    public String LastName { get; set; } 

    public Boolean IsActive { get; set; } 
    public DateTime DateCreated { get; set; } 


    public virtual ICollection<Roles> Roles { get; set; } 
} 

公共类角色 {

[Key] 
    public int RoleId { get; set; } 

    [Required] 
    public string RoleName { get; set; } 
    public string Description { get; set; } 

    public virtual ICollection<User> Users { get; set; } 
} 

问题是,就像当我尝试使用我的用户名和密码登录,角色需要从DatContext类检查。

但是那时候我的角色不是从DataContext类中传入的,而是给出了ArgumentNullException。

回答