В ASP.NET 2.0 недавно добавленная функция поставщика членства в сочетании с рядом мощных средств управления регистрацией и входом позволяет легко управлять входом и разрешениями пользователей (см. << Введение в элементы управления входом в ASP.NET 2.0 >>).
Однако вы можете обнаружить, что элементы управления входом и функции управления членством, поставляемые с ASP.NET 2.0, по умолчанию используются с SQL Server 2005 Express. Итак, как изменить его для использования SQL Server 2000 или других источников данных, таких как доступ? , оракул и т. д.? Если вы хотите переписать приложение для управления вошедшими в систему пользователями или разрешениями пользователей в вашем приложении, как вам следует его изменить? В этой статье мы покажем, как использовать собственный поставщик в ASP.NET 2.0 для взаимодействия с элементом управления входом в систему для реализации простого процесса входа в систему.
Чтобы понять, как работает поставщик в ASP.NET 2.0, сначала посмотрите на следующую структурную диаграмму:
Имя поля Тип данных Размер поля Имя пользователя (ключ) Текст 8 Текст пароля 8 Текст электронной почты 50 парольТекст вопроса 50 парольТекст ответа 50 |
Открытый класс ModifiedSqlMembershipProvider Наследует SqlMembershipProvider Публичная переопределенная функция CreateUser (...) ... Конечная функция ... Конечный класс |
Если вы не хотите использовать SqlMembershipProvider, представленный в бета-версии 2 Visual Studio 2005, вам нужно только объявить свой собственный класс и наследовать класс MembershipProvider. Класс MembershipProvider содержит методы и свойства, связанные с членством.
В обозревателе решений используйте «Добавить новый элемент..», чтобы добавить класс, назовите его AccessMembershipProvider.vb и следуйте подсказкам системы, чтобы поместить его в каталог App_Code.
Затем укажите соответствующее пространство имен и напишите структуру программы следующим образом:
Импортирует Microsoft.VisualBasic.
Импортирует
общедоступный класс System.Data AccessMembershipProvider.
Наследует членствопровайдера
Чтобы использовать собственный поставщик,
End Class
должен выполнить соответствующие настройки в файле web.config.Вы можете добавить новый файл web.config и написать следующий код:
<system.web>
<режим аутентификации="Формы"/>
<членство
defaultProvider="AccessMembershipProvider" >
<поставщики>
<add name="AccessMembershipProvider"
type="AccessMembershipProvider"
требуетсяQuestionAndAnswer="истина"
ConnectionString="Provider=Microsoft.Jet.
OLEDB.4.0;Источник данных=C:NewMembershipProvider
App_DataMembers.mdb;Постоянная безопасность
Информация=Ложь" />
</провайдеры>
</членство>
</system.web>
Среди них обратите внимание на следующие моменты:
в качестве метода аутентификации необходимо выбрать «Формы» (authentication mode="forms").
Используя тег <add>, добавьте собственный поставщик с именем AccessMembershipProvider. .
Атрибут requireQuestionAndAnswer, если его значение равно true, указывает, что во время новой регистрации необходимо заполнить подсказки и ответы, на которые необходимо ответить.
ConnectionString указывает строку подключения для подключения к базе данных.
Атрибут DefaultProvider указывает, какой поставщик система использует по умолчанию, поскольку в системе можно установить несколько поставщиков.
В AccessMembershipProvider.vb добавьте следующий закрытый член
Private connStr As String.
Частное сообщение как новое OleDb.OleDbCommand
Частный _requiresQuestionAndAnswer как логическое значение
Private _minRequiredPasswordLength As Integer
и добавьте метод Initialize(), код выглядит следующим образом.
Public Overrides Sub Initialize (имя ByVal As String, конфигурация ByVal As System.Collections.Specialized.NameValueCollection)
'=== извлекает значения атрибута, установленные в
'web.config и присвоить его локальным переменным===
Если config("requiresQuestionAndAnswer") = "true" Тогда _
_requiresQuestionAndAnswer = Истина
connStr = конфигурация («Строка подключения»)
MyBase.Initialize(имя, конфигурация)
End SubКогда
провайдер загружен, будет вызван метод Initialize(). В файле web.config только что в этом методе можно прочитать различные значения атрибутов, установленные с помощью тега <add>. Например, его можно прочитать с помощью параметра config. В приведенном выше коде config("connectionString") используется для чтения строки подключения к базе данных и помещения ее в переменную connStr. После этого установите свойство RequiresQuestionAndAnswer следующим образом:
Public Overrides ReadOnly Property _
RequiresQuestionAndAnswer() _
Как логическое значение
Получать
Если _requiresQuestionAndAnswer = True Тогда
Вернуть истину
Еще
Вернуть ложь
Конец, если
Конец Получить
Конечное свойство
Обратите внимание, что значение этого свойства должно быть установлено, иначе в элементе управления CreateUserWizard два текстовых поля с вопросом о пароле и ответом на запрос пароля не будут отображаться.
Далее мы можем начать писать код для создания нового пользователя. Код метода CreateUser() выглядит следующим образом:
Public Overrides Function CreateUser (имя пользователя ByVal As String, пароль ByVal As String, адрес электронной почты ByVal As String, пароль ByValQuestion As String. , ByVal парольAnswer Как строка, ByVal isApproved как логическое значение, ByVal поставщикUserKey как объект, статус ByRef как System.Web.Security.MembershipCreateStatus) Как System.Web.Security.MembershipUser
Dim conn как новый OleDb.OleDbConnection(connStr)
Пытаться
конн.Открыть()
Dim sql As String = "ВСТАВИТЬ В ЗНАЧЕНИЯ членства (" & _
"@имя пользователя, @пароль, @электронная почта, " & _
" @passwordQuestion, @passwordAnswer )"
Dim comm As New OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@username", имя пользователя)
comm.Parameters.AddWithValue("@пароль", пароль)
comm.Parameters.AddWithValue("@email", электронная почта)
comm.Parameters.AddWithValue("@passwordQuestion", passwordQuestion)
comm.Parameters.AddWithValue("@passwordAnswer", passwordAnswer)
Тусклый результат как целое число = comm.ExecuteNonQuery()
conn.Close()
= MembershipCreateStatus.Success
Dim user As New MembershipUser («AccessMembershipProvider», имя пользователя, Ничего, адрес электронной почты, парольВопрос, Ничего, Правда, Ложь, Сейчас, Ничего, Ничего, Ничего, Ничего)
Вернуть пользователя
Поймать бывшего как исключение
статус = MembershipCreateStatus.UserRejected
Ничего не возвращать
Конец попытки
Конечная функция
Давайте интерпретируем приведенный выше код. Сначала мы вставляем запись в базу данных. После успешного добавления нового пользователя мы должны вернуть статус информации о статусе (статус передается как статус ByRef As System.Web.Security.MembershipCreateStatus). метод), и мы хотим вернуть экземпляр класса MembershipUser, поэтому мы возвращаем его экземпляр следующим образом:
Dim user As New MembershipUser("AccessMembershipProvider", имя пользователя, Nothing, электронная почта, парольВопрос, Nothing, True, False, Now, Ничего, Ничего, Ничего, Ничего)
Среди них есть много конструкторов, использующих методы класса MembershipUser. Подробности можно проверить в MSDN. Здесь мы используем только имя пользователя, адрес электронной почты, парольВопрос, дата создания (дата создания учетной записи, СЕЙЧАС). используется здесь).
На странице входа, чтобы определить, входит ли в систему законный пользователь, необходимо написать следующий код:
Public Overrides Function ValidateUser( _
Имя пользователя ByVal Как строка, _
Пароль ByVal Как строка) Как логическое значение
Dim conn Как новый OleDb.OleDbConnection(connStr)
Пытаться
конн.Открыть()
Dim sql As String = _
«Выбрать * Из членства ГДЕ» & _
" username=@имя пользователя И пароль=@пароль "
Dim comm As New OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@username", _
имя пользователя)
comm.Parameters.AddWithValue("@password", _
пароль)
Dim Reader As OleDb.OleDbDataReader = _
com.ExecuteReader
Если read.HasRows Тогда
Вернуть истину
Еще
Вернуть ложь
Конец, если
conn.Close()
Перехватывать ex как исключение
Console.Write(ex.ToString)
Вернуть ложь
Конец попытки
Конечная функция
аналогична этой: завершен простой настраиваемый поставщик, который можно использовать для входа в систему, регистрации и других элементов управления. При запуске программы сначала появляется страница регистрации пользователя. Когда пользователь успешно зарегистрируется, он будет перенаправлен на страницу входа, как показано на следующем рисунке: