Настройка провайдера SimpleMembership

Я использую простого поставщика членства в приложении mvc4, и я вижу пять сгенерированных для этого таблиц. В этом я вижу, что имя пользователя и пароль хранятся в разных таблицах. Я хочу сохранить имя пользователя и пароль в одной таблице с некоторыми настраиваемыми полями. Поэтому я создаю своего собственного провайдера членства, наследуя провайдера ExtendingMembership. У меня есть несколько вопросов по этому поводу.

  1. Мое приложение использует трехуровневую архитектуру (уровни BLL, DAL и Presentation) и создало 2 области для учетной записи и администратора. Итак, здесь я не знаю, где разместить своего поставщика членства, к которому затем обращаются с каждой частью приложения для использования атрибута авторизации.
  2. Я переопределяю этот метод CreateUserAndAccount. Нужно ли мне реализовывать собственную логику для сохранения данных регистрации пользователей в базе данных. Но я обнаружил, что передаются только некоторые параметры, как передать оставшиеся настраиваемые поля из представления в контроллер с помощью объекта словаря?

    public override string CreateUserAndAccount(string userName, string password, bool     requireConfirmation, IDictionary<string, object> values)
    {
        throw new NotImplementedException();
    }
    

person Hary    schedule 29.12.2012    source источник


Ответы (2)


Что касается вопроса № 2: ознакомьтесь с этим вопросом, который я задал на этих выходных... сообщение в блоге, на которое я ссылался в вопросе, так как оно очень полезно для расширения SimpleMembership.

person da7rutrak    schedule 28.01.2013

Для № 1: используйте DI, чтобы ввести ExtendedMembershipProvider в ваш слой BLL по мере необходимости. Сопоставьте его в конфигурации DI с Membership.Provider. Фактически это DAL, и он не должен содержать бизнес-логику. Еще лучше создать фасад вокруг WebSecurity и вместо этого внедрить его в свой BLL.

Для № 2: да, интерфейс ExtendedMembershipProvider использует словарь пар ключ/значение, который можно использовать для сопоставления свойств профиля пользователя со схемой базы данных с использованием реализации по вашему выбору.

SimpleMembershipProvider делает это, сопоставляя ключи словаря с соответствующими столбцами базы данных. После создания записи вы можете напрямую управлять данными пользователя с помощью EF и модели UserProfile.

Реализация собственного ExtendedMembershipProvider требует много работы, и я бы не рекомендовал это делать. Схема SimpleMembershipProvider относительно чистая по сравнению с устаревшими итерациями, и я думаю, вам понадобится очень веская причина, чтобы переместить столбец пароля в пользовательскую таблицу, а не просто настроить SimpleMembershipProvider для использования вашей собственной схемы и оставить пароль там, где он по праву принадлежит. .

person TheCodeKing    schedule 03.10.2013