Я работаю над формами Authnetication, где я использовал свою собственную Entity Framework, а также я использовал DataContext для предоставления ролей пользователям. Я зашит в DataCOntectInitializer нижеEntity Framework Enable-Migrations -EnableAutomaticMigrations?
общественного класса DataContextInitializer: CreateDatabaseIfNotExists { защищены переопределения недействительного Seed (DataContext контекст) { Ролей Role1 = новые роли {RoleName = "Admin"}; Роли role2 = новые Роли {RoleName = "Пользователь"};
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.