Это может быть слегка неосведомленный вопрос, но я новичок в mvc, поэтому извините!
Я изучил модель аутентификации обеда для ботаников, но в моем приложении у меня сложная аутентификация на основе ролей.Итак, что я делаю, это:
void MvcApplication_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpCookie authCookie = HttpContext.Current.Request
.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
string encTicket = authCookie.Value;
if (!String.IsNullOrEmpty(encTicket))
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt(encTicket);
CustomIdentity id = new CustomIdentity(ticket.Name);
GenericPrincipal prin = new GenericPrincipal(id, id.Roles);
HttpContext.Current.User = prin;
}
}
}
При входе в систему я аутентифицирую имя пользователя / пароль с помощью FormsAuth, а затем создаю cookie.
Проблема здесь каждыйКогда я создаю пользовательский идентификатор, мне нужно запросить в базе данных роли пользователей .Есть ли правильный способ обойти это или я правильно делаю запрос к БД при каждом входящем запросе?Должен ли я сохранить список ролей в куки или что-то?
Я также не совсем понимаю весь жизненный цикл того, как аутентификация форм заботится об аутентификации?Я использую тот же самый шаблон проектирования IFormsAuthentication
, что и пользователи ужина, и во время входа в систему я звоню FormsAuth.SignIn()
, что, в свою очередь, вызывает FormsAuthentication.SetAuthCookie
. Когда ему удается вызвать метод membershipservice.validateuser()
??Кроме того, если для auth cookie установлено , зачем ботанику создать билет, затем добавить его в запрос и затем прочитать его во время PostAuthenticationRequest
, чтобы узнать, каким пользователем он был.Работает ли билет как сессия?
Спасибо!С Рождеством!
Обновление : Эта ссылка дала мне немного лучшее представление о билете проверки подлинности с помощью форм.