MVC 3 Basic Пользовательское членство - PullRequest
1 голос
/ 27 января 2012

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

Итак, допустим, что:

Шаг 1, я создаю базу данных SQL, и в этой базе данных у меня есть базовая таблица Users, которая выглядит следующим образом:

Users
UserID int, identity, primary key
UserName nvarchar(25)
UserPassword nvarchar (25)
UserEmail nvarchar (75)

Шаг 2, я создаю новое веб-приложение ASP.NET MVC3

Шаг 3, я выбираю шаблон интернет-приложения с помощью движка Razor и проверяю использование семантической разметки HTML 5

Шаг 4, я добавляю модель данных объекта ADO.NET

Шаг 5. В мастере модели данных сущностей я выбираю Генерировать из базы данных

Шаг 6, я выбираю свое подключение для передачи данных и выбираю Сохранить настройки подключения к объекту в Web.Config

Шаг 7. В мастере Entity Data Model Wizard ==> Выберите объекты базы данных, я поставил галочку в Таблицах и оставил галочки по умолчанию в «Плюрализовать или сингулярно сгенерированные имена объектов» и «Включить столбцы внешнего ключа в модель». и нажмите Готово

Шаг 8, я создаю решение

Шаг 9, я щелкаю правой кнопкой мыши в файле .edmx и выбираю «Добавить элемент генерации кода ...»

Шаг 10, я добавляю новый ADO.NET DbContext Generator (затем создаются все модели таблиц)

ОК, поэтому я не знаю, как дальше использовать встроенную систему Account / Membership с моей таблицей Users. На данный момент, в любом случае, для этого конкретного проекта мне не нужны роли и что-то, только функциональность [санкционировать] ...

Итак, что именно, дословное соответствие, мне нужно сделать, чтобы, когда пользователь заходит на сайт и регистрируется или входит в систему, чтобы приложение использовало мою таблицу Users? В конечном итоге, когда пользователь входит в систему, украшение [authorize] будет работать для моей базы пользователей.


РЕДАКТИРОВАТЬ: Благодаря olivehour ... Следующие изменения, дополнения действительно, чтобы сделать эту работу ...

После шага 10: (примечание: удалите пароль пользователя из таблицы «Пользователи», он вам не понадобится)

Шаг 11. Запустите инструмент aspnet_regsql.exe, чтобы добавить таблицы ASP.NET в базу данных.

Шаг 12. Откройте файл Web.config, скопируйте только информацию об «источнике данных» из вашей строки подключения EntityFramework, затем вставьте и замените источник данных «Строка подключения ApplicationServices» на источник данных EntityFramework.

Шаг 13, В обозревателе решений щелкните правой кнопкой мыши каталог Controller и выберите Add Controller. На этом этапе добавьте свой UserController

Шаг 14. В AccountController в методе действия [HttpPost] Register внутри инструкции if (createStatus == MembershipCreateStatus.Success) добавьте следующее:

TheNameOfYourEntities db = new TheNameOfYourEntities();
User user = new TheNameOfYourProject.User();
user.UserName = model.UserName;
user.UserEmail = model.Email;
db.Users.Add(user);
db.SaveChanges();

Шаг 15, Постройте решение, сохраните все, запустите

1 Ответ

1 голос
/ 27 января 2012

Мы держим встроенного поставщика членства отдельно от таблицы пользователей нашего приложения.

Я предлагаю использовать встроенный поставщик членства для обработки аутентификации пользователя. Есть некоторые настройки, которые требуют принятия некоторых решений. Например, каким будет имя пользователя? Вы хотите разрешить адреса электронной почты в качестве имен пользователей? Если это так, вы должны установить для requireUniqueEmail значение true в элементе provider в web.config. (Мы делаем адрес электронной почты пользователя его именем пользователя. Это сильно упрощает процесс.)

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

Итак, если пользователь регистрируется по адресу электронной почты olivehour@stackoverflow.com, вы сначала должны сделать Membership.CreateUser, чтобы добавить их в базу данных провайдера, и в том же действии добавить строку в таблицу пользователей с первичным ключом. of olivehour@stackoverflow.com.

Таким образом, вам никогда не придется хранить какие-либо значения шифрования пароля в вашей базе данных ... вы передаете его поставщику членства. Когда пользователь входит в систему, FormsAuthentication напишет cookie для поддержания статуса входа в систему. В действии контроллера вы можете получить имя пользователя с кодом User.Identity.Name. Используйте это значение в качестве параметра для выбора строк из пользовательской таблицы пользовательских приложений.

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