Я создаю новое веб-приложение, которое будет написано с использованием MVC 5 и Entity Framework Database First Approach. Я также хотел бы использовать ASP.Net Identity, чтобы следить за членством, аутентификацией, авторизацией и т.д.
Я хорошо прочитал об идентификаторе ASP.Net в Интернете и о том, как это работает, однако я все еще узнаю об этой теме.
Когда я создал приложение MVC 5 в Visual Studio 2013 и посмотрел на Контроллер учетной записи, мой первый инстинкт состоял в том, что мне не понравилось то, что я увидел, т.е. DbContext ссылался на " ApplicationDbContext". Причина, по которой мне это не нравилось, заключается в том, что я предпочитаю сохранять свой DbContext в соответствующем проекте в моем решении, то есть в моем уровне модели, который придерживается логики разделения проблем.
Кроме того, проект из проекта MVC 5 использует проект Entity Framework Code First для создания базы данных по умолчанию и таблиц для хранения пользователей, ролей и т.д.
Поскольку я должен использовать существующую базу данных с существующей таблицей пользователя, этот подход не подходит моим потребностям.
Я по-прежнему хочу использовать новейшую идентификацию ASP.Net для своего приложения, поскольку она имеет много преимуществ, поэтому я нашел эту статью, которая полностью удалила код Entity Framework, но все еще получила аутентификацию с использованием OWIN в ASP.NET MVC.
http://www.khalidabuhakmeh.com/asp-net-mvc-5-authentication-breakdown-part-deux
Используя приведенный выше учебник, введите метод HttpPost Login для моего Контроллера учетных записей
[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
//Calling my own custom Account Service which validates users login details
var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
if (user)
{
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
//ToDo: Manually adding Role, but will pull from db later
identity.AddClaim(new Claim(ClaimTypes.Role, "guest"));
AuthenticationManager.SignIn(new AuthenticationProperties
{
IsPersistent = model.RememberMe
}, identity);
return RedirectToAction("Index", "MyDashboard");
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
return View(model);
}
В моих предыдущих приложениях MVC я обычно заказывал свое собственное пользовательское членство, и когда Пользователь регистрировался на сайте и был аутентифицирован, я бы сохранил любые дополнительные данные пользователя, такие как userID, DOB и т.д. в UserData строки FormsAuthenticationTicket.
Поскольку в приведенном выше коде не используется FormsAuthentication, вместо этого он использует OWIN CookieAuthentication, я не уверен, как хранить эти дополнительные пользовательские данные.
Поэтому у меня есть несколько вопросов о проблемах, которые я испытываю.
-
Как сохранить идентификатор пользователя или любую другую дополнительную часть пользовательских данных (DOB и т.д.) так, как я использовал в FormsAuthentication? Это делается путем добавления претензии к идентификатору?
-
Является ли метод использования ASP.Net Identity/OWIN выше правильным, учитывая, что я использую Entity Framework Database First с существующей базой данных?
-
Должен ли я использовать код, который используется в контроллере учетных записей, то есть UserManager, ApplicationUser, ApplicationDbContext и т.д., и использовать его для работы с моей существующей базой данных?
Извиняюсь, если мой вопрос запутан, я полагаю, что я немного не уверен, какой подход я должен использовать, пытаясь использовать идентификатор ASP.Net в своем последнем проекте.
Приветствуется любая обратная связь.
Спасибо.