Проверка дополнительных требований при входе в систему? (MVC, формы аутентификации) - PullRequest
2 голосов
/ 13 июня 2011

Справочная информация:

Я включаю поставщика SqlMembership в существующую систему, в которой я создаю веб-интерфейс. База данных участников будет храниться в отдельной базе данных.

Помимо учетной записи для входа в систему существует дополнительное сопоставление между учетными записями, которые должны быть в основной базе данных, чтобы учетная запись могла войти в систему.

Допустим, эта таблица дает пользователю право использовать систему.

Мой вопрос:

Я бы хотел как-то включить это в провайдера. Это возможно без лишней работы? (Или лучше оставить его в классе AccountMembershipService?) На самом деле, мне очень интересно узнать , как вводить дополнительные требования для входа в провайдер.

Я спрашиваю об этом, потому что, когда я смотрел на создание собственного провайдера членства ранее, это казалось в то время немного подавляющим.

Другими словами:

Я хочу понять, как расширить классы поставщика членства в целом и как расширить метод входа в систему (ValidateUser) в частности.

Учитывая пример реализации ODBC Похоже, можно просто создать подкласс поставщика по умолчанию и переопределить ValidateUser, вызвав base.ValidateUser в качестве первого шага. Однако это может быть, а может и не быть так просто, и я был бы очень рад услышать из первых рук о внедрении или расширении членства поставщиков.

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Я хотел сделать что-то похожее, одним из требований было использование БД Oracle, поэтому я реализовал поставщика OracleMembership, поэтому я не мог тратить свое время на переписывание поставщика членства в сервисном оракуле (он работает довольно хорошо), второйтребовалось использовать обычную систему авторизации.Итак, я понял, что шаблон интернет-приложения, который поставляется с MVC 2 или 3, поставляется с небольшой реализацией безопасности для сайта, в частности, взглянем на класс AccountMembershipService.Вы можете переместить все эти элементы из приложения MVC в отдельную сборку, чтобы вы могли использовать их даже в клиентской реализации.AccountMembershipService использует поставщика членства в качестве базовой системы аутентификации с возможностью использования FormsAuthentication.

Поэтому я рекомендую вам взглянуть на эту реализацию.Вы можете добавить туда свой дополнительный код аутентификации, чтобы ваше приложение оставалось чистым, и вам не нужно заново изобретать колесо, и у вас есть возможность добавить свой собственный код.

наилучшие пожелания

0 голосов
/ 13 июня 2011

Чтобы расширить членство провайдера, создайте собственные таблицы с отношением один к одному с основной базой данных и обработайте дополнительные требования с помощью этой таблицы. Кроме того, при реализации и расширении поставщика членства по умолчанию вам может понадобиться хранить дополнительную информацию в authcookies, вы можете получить дополнительную информацию от здесь , здесь и здесь

В GetUserCredentials вы будете выполнять свои действия для дополнительной проверки, а RoleID - это выпадающий список на странице входа в систему, который вы получите при входе методом post.

FormsAuth.SignIn(userName, rememberMe);
            ApplicationRepository _ApplicationRepository = new ApplicationRepository();
            MembershipUser aspUser = Membership.GetUser(userName);
            SessionUser CurrentUser = _ApplicationRepository.GetUserCredentials(aspUser.ProviderUserKey.ToString(), RoleID);
            if (CurrentUser == null) 
            {
                ModelState.AddModelError("_FORM", "Invalid Role ");                   
                FormsAuth.SignOut();
                return View("signin");
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...