No ASP.NET 2.0, a função de provedor de associação recém-adicionada, combinada com uma série de controles poderosos de registro e login, pode gerenciar facilmente o login e as permissões do usuário (consulte << Introdução aos controles de login do ASP.NET 2.0 >>).
No entanto, você pode descobrir que os controles de login e as funções de gerenciamento de associação que acompanham o ASP.NET 2.0 são usados com o SQL Server 2005 Express por padrão. Então, como alterá-lo para usar o SQL Server 2000 ou outras fontes de dados, como o acesso? , oráculo, etc.? Se você deseja reescrever um aplicativo para gerenciar usuários logados ou permissões de usuário em seu aplicativo, como você deve modificá-lo? Neste artigo, mostraremos como usar um provedor personalizado no ASP.NET 2.0 para cooperar com o controle de login e implementar um processo de login simples.
Para entender como funciona o provedor no ASP.NET 2.0, primeiro observe o seguinte diagrama de estrutura:
Nome do campo Tipo de dados Tamanho do campo Nome de usuário (chave) Texto 8 Texto da senha 8 Texto de e-mail 50 senhaQuestion Text 50 senhaResponder Texto 50 |
Classe pública ModifiedSqlMembershipProvider Herda SqlMembershipProvider Função de substituição pública CreateUser (...) ... Função final ... Classe final |
Se você não quiser usar o SqlMembershipProvider fornecido no Visual Studio 2005 beta 2, precisará apenas declarar sua própria classe e herdar a classe MembershipProvider. A classe MembershipProvider contém métodos e propriedades relacionados à associação.
No Solution Explorer, use "Adicionar novo item.." para adicionar uma classe, nomeie-a como AccessMembershipProvider.vb e siga os prompts do sistema para colocá-la no diretório App_Code.
Em seguida, faça referência ao namespace relevante e escreva a estrutura do programa da seguinte forma:
Imports Microsoft.VisualBasic
Importa
classe pública System.Data AccessMembershipProvider
Herda MembershipProvider
Para usar um provedor personalizado,
End Class
deve fazer configurações relevantes em web.config.Você pode adicionar um novo arquivo web.config e escrever o seguinte código:
<system.web>
<modo de autenticação="Formulários"/>
<associação
defaultProvider="AccessMembershipProvider" >
<provedores>
<add name="AccessMembershipProvider"
type="AccessMembershipProvider"
requerQuestionAndAnswer="true"
connectionString="Provider=Microsoft.Jet.
OLEDB.4.0;Fonte de dados=C:NewMembershipProvider
App_DataMembers.mdb;Persistir Segurança
Informações=Falso" />
</provedores>
</membro>
</system.web>
Entre eles, preste atenção aos seguintes pontos:
o método de autenticação deve ser selecionado como "Formulários" (authentication mode="forms").
Usando a tag <add>, adicione um provedor personalizado chamado AccessMembershipProvider). .
O atributo requireQuestionAndAnswer, quando seu valor é verdadeiro, indica que durante o novo cadastro deverão ser preenchidas as perguntas e respostas imediatas a serem respondidas.
ConnectionString, indica a string de conexão para conectar ao banco de dados.
O atributo DefaultProvider indica qual provedor o sistema usa por padrão, porque vários provedores podem ser configurados em um sistema.
Em AccessMembershipProvider.vb, adicione o seguinte membro privado
Private connStr As String.
Comunicação privada como novo OleDb.OleDbCommand
Privado _requiresQuestionAndAnswer como booleano
Private _minRequiredPasswordLength Como Integer
e adicione o método Initialize(), o código é o seguinte
Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection)
'===recupera os valores dos atributos definidos em
'web.config e atribuir variáveis locais===
Se config("requiresQuestionAndAnswer") = "true" Então _
_requiresQuestionAndAnswer = Verdadeiro
connStr = config("connectionString")
MyBase.Initialize(nome, configuração)
End SubQuando
o provedor for carregado, o método Initialize() será chamado. No arquivo web.config agora, os vários valores de atributos definidos usando a tag <add> podem ser lidos neste método. Por exemplo, ele pode ser lido usando o parâmetro config. No código acima, config("connectionString") é usado para ler a string de conexão do banco de dados e colocá-la na variável connStr. Depois disso, defina a propriedade RequiresQuestionAndAnswer da seguinte forma:
Public Overrides ReadOnly Property _
RequerPerguntaEResposta() _
Como booleano
Pegar
Se _requiresQuestionAndAnswer = True, então
Retornar verdadeiro
Outro
Retornar falso
Terminar se
Fim
Propriedade End
Observe que o valor desta propriedade deve ser definido, caso contrário, no controle CreateUserWizard, as duas caixas de texto de pergunta do prompt de senha e resposta do prompt de senha não serão exibidas.
A seguir, podemos começar a escrever o código para criar um novo usuário. O código do método CreateUser() é o seguinte:
Função de substituição pública CreateUser(ByVal nome de usuário As String, ByVal senha As String, ByVal email As String, ByVal passwordQuestion As String , ByVal passwordAnswer As String , ByVal isApproved As Boolean, ByVal ProviderUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser
Dim conn como novo OleDb.OleDbConnection(connStr)
Tentar
conexão.Open()
Dim sql As String = "INSERT INTO Membership VALUES (" & _
"@nomedeusuário, @senha, @e-mail, " & _
"@passwordQuestion, @passwordAnswer)"
Dim comunicação como novo OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@nomedeusuário", nome de usuário)
comm.Parameters.AddWithValue("@senha", senha)
comm.Parameters.AddWithValue("@email", email)
comm.Parameters.AddWithValue("@passwordQuestion", senhaQuestion)
comm.Parameters.AddWithValue("@passwordAnswer", senhaAnswer)
Dim resultado As Integer = comm.ExecuteNonQuery()
conn.Close()
status = MembershipCreateStatus.Success
Dim user As New MembershipUser("AccessMembershipProvider", nome de usuário, Nothing, email, passwordQuestion, Nothing, True, False, Now, Nothing, Nothing, Nothing, Nothing)
Usuário de retorno
Capturar ex como exceção
status = MembershipCreateStatus.UserRejected
Não retornar nada
Finalizar tentativa
Função final
Vamos interpretar o código acima. Primeiro, inserimos um registro no banco de dados. Depois que o novo usuário for adicionado com sucesso, devemos retornar um status de informação de status (o status é passado como ByRef status As System.Web.Security .MembershipCreateStatus. método) e queremos retornar uma instância da classe MembershipUser, então retornamos sua instância desta forma:
Dim user As New MembershipUser("AccessMembershipProvider", username, Nothing, email, passwordQuestion, Nothing, True , False, Now, Nada, Nada, Nada, Nada)
Entre eles, existem muitos construtores que utilizam os métodos da classe MembershipUser Para detalhes, você pode verificar o MSDN Aqui usamos apenas nome de usuário, email, passwordQuestion,createddate (data de criação da conta, AGORA é. usado aqui).
Na página de login, para determinar se um usuário legítimo está efetuando login, você precisa escrever o seguinte código:
Public Overrides Function ValidateUser( _
Nome de usuário ByVal como String, _
ByVal senha As String) As Boolean
Dim conn As New OleDb.OleDbConnection(connStr)
Tentar
conexão.Open()
Dim sql como String = _
"Selecione * Da associação ONDE" & _
" nomedeusuário=@nomedeusuário AND senha=@senha "
Dim comunicação como novo OleDb.OleDbCommand(sql, conn)
comm.Parameters.AddWithValue("@nomedeusuário", _
nome de usuário)
comm.Parameters.AddWithValue("@senha", _
senha)
Dim leitor As OleDb.OleDbDataReader = _
comm.ExecuteReader
Se leitor.HasRows Então
Retornar verdadeiro
Outro
Retornar falso
Terminar se
conn.Close()
Catch ex como exceção
Console.Write (ex.ToString)
Retornar falso
Finalizar tentativa
End Function
é assim mesmo, é concluído um provedor personalizado simples, que pode ser usado com login, registro e outros controles. Ao executar o programa, a página de registro do usuário aparece pela primeira vez. Quando o usuário se registra com sucesso, o usuário será direcionado para a página de login, conforme mostrado na figura a seguir: