
В нынешнее время малое количество интернет ресурсов обходится без авторизации пользователей. Потому я в начале своего обучения, должен был ознакомиться с возможностями ASP.NET реализовать данный механизм. Немногим позже я узнал о существовании Membership API и решил им воспользоваться. К счастью, Visual Studio при помощи Web Site Administration Tool с легкостью позволяет настроить все, для работы, используя базовые настройки. Все, что нужно, это выбрать метод аутентификации с помощью форм и создать пользователя, после чего в директорию App_Data будет помещен файл базы данных с необходимой структурой таблиц. Я с радостью пользовался им на протяжении длительного времени, не зная бед. Пока в один прекрасный день не пришлось слегка переделать уже существующий проект, в котором изначально не предполагалась авторизация.
Так как работа с пользователями не планировалась, я смело завел себе БД, наполнил ее необходимыми мне таблицами и постепенно развивал проект. Проект стал понемногу расти и в какой-то момент, я решил все-таки, реализовать механизм аутентификации. Я по привычке отправился в WAT и принялся заводить пользователя. Студия успешно создала мне файл БД с именем aspnetdb.mdf как обычно. Но это не совсем то, что мне было нужно. Я, конечно, мог бы использовать данную БД для аутентификации, а свою прежнюю таблицу для проекта, но тогда я не смогу задействовать внешние ключи между базами и я утеряю кучу возможностей, которые так хотел реализовать.
Тут я, немного растерявшись, уперся в стену. Я не знал, как подступиться к этой проблеме. Одним из вариантов был перенос таблиц из старой БД в новую, но этот вариант мне никак не нравился. Я был уверен, что должно быть иное решение. Немного покопавшись в Интернете, я узнал о том, что необходимо использовать инструмент aspnet_regsql.exe. При запуске без параметров, можно воспользоваться возможностями мастера. Только мастер не увидит SQL Express сервер, а в моем случае используется именно он. Пришлось разобрать параметры командной строки в результате чего получилась вот такая команда:
aspnet_regsql.exe –A all –C "Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True" –d "D:\aspnet_projects\myproject\App_Data\myolddbname.mdf"
, где:
-A Инсталлирует прикладные службы. Допустимые опции: all – для инсталляции всех служб, m – предназначена для Membership, r – службы ролей, p — для поддержки пользовательских профилей, c – персонализация частей Веб-станиц.
-С Позволяет специфицировать полную строку соединения.
-d Имя БД в которой необходимо инсталлировать необходимые службы.
После применения команды в моей старой БД появились сгенерированные таблицы для работы с пользователями. Осчастливленный данным удобством, я снова побежал в WAT регистрировать первого пользователя. Естественно меня опять поджидал провал.
Как выяснилось немногим позже необходимо сконфигурировать поставщика Membership в web.config моего веб-приложения. Для чего в секцию <system.web> нужно поместить соответсвующий код:
<membership defaultProvider="MyMembershipProvider">
<providers>
<add name="MyMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyConnectionString" applicationName="/" />
</providers>
</membership>
Тем самым я указал имя своего поставщика и строку подключения. В этот раз, пользователь был успешно создан и помещен в мою базу данных. Далее я продолжил развивать проект уже успешно используя авторизацию пользователей.
Статья больше подходит для уровня начинающих. Опытные разработчики, вряд ли откроют для себя, что-то новое.
За помощь в публикации отдельное спасибо XaocCPS