ASP.NET  - Criando um formulário de Login

 

Aqui estou eu , em mais um artigo sobre ASP.NET. Se você esta pensando que estou abandonando o VB.NET , esta enganado . Se olhar bem o código que eu estou usando nas páginas ASP.NET é VB.NET. Além do mais não há como separar um coisa da outra esta tudo interligado. Então você leva dupla vantagem ao estudar VB.NET :  cria suas aplicações em Desktop e usando o mesmo conhecimento também cria poderosas aplicações para Web.

 

Então para enriquecer mais ainda o seu já vasto cabedal de conhecimentos sobre VB.NET e ASP.NET vou mostrar como você pode criar um formulário de login para permitir que somente os usuários autorizados por você tenham acesso ao seu site. No artigo Trabalhando com Controles e Web Forms - II eu mostrei como usar os controles de validação para você criar um formulário de login usando o Visual Studio.NET ; neste artigo eu pretendo ir um pouco mais além.  Vou mostrar como fazer a validação de chaves e senhas gravadas em um banco de dados Access em um formulário ASP.NET.

 

O formulário de login será exibido na primeira vez que qualquer usuário acessar o site e ele terá que se autenticar informando chave e senha. O site é um bolão sobre as corridas de formula 1 que eu estou fazendo para mostrar algumas funcionalidades da ASP.NET.

 

Vamos ter que acessar um banco de dados e verificar se a chave e a senha informadas estão cadastradas. A primeira coisa a fazer então e criar um banco de dados e uma tabela onde iremos guardar as informações dos usuários/clientes.  Eu criei o banco de dados BolaF1.mdb e a tabela Participantes com a seguinte estrutura:

 

 O banco de dados BolaoF1.mdb esta presente no diretório d:/inetpub/wwwroot/dados na minha máquina local.

Você pode colocar o banco de dados em qualque diretório virtual que tenha criado para trabalhar com ASP.NET.

 

Existe um funcionalidade interessante no formulário de login ; o sistema irá verificar se este é o primeiro login feito pelo usuário e em caso positivo irá direcionar o usuário para alterar sua chave e senha. Isto somente vai ocorrer no primeiro login.

 

Vamos agora mostrar a cara do formulário de login , que eu chamei de default.aspx . Para acessar o formulário você deve ter o IIS instalado e funcionando . Veja o artigo - ASP.NET - Instalando e Configurando o Internet Information Services - IIS. - para maiores detalhes.  Na minha máquina os arquivos do projeto foram colocados na pasta c:\inetpub\wwwroot\f1. Eu estou usando o bloco de notas para digitar o código VB.NET e código HTML dos arquivos aspx.

 

Veja na figura abaixo a aparência da página default.aspx :

 

 - No formulário temos os seguintes controles :

- Uma imagem gif - exibida via código abaixo:

 <img border="0" src="senn7.gif" width="300" height="178">

-  dois controles TextBox e um controle Button declarados conforme código abaixo :

<table border="0" align="center">
 <tr>
 <td align="right" valign="Top"><b>Chave : </b></td>
 <td align="Left" valign="Top"><asp:TextBox id="lguid" runat="server" /></td>
 </tr>
 <tr>
 <td align="Right" valign="Top"><b>Senha: </b></td>
 <td align="Left" valign="Top"><asp:TextBox id="lgpwd" runat="server" /></td>
 </tr>
 <tr>
 <td align="Center" valign="Top" Colspan="2">
 <asp:Button id="buttonlg" Text="Entrar" onclick="dologin" runat="server" />
 </td>
 </tr>
</table>
 

 

Vou  mostrar o código da página a seguir para você não ficar muito curioso e por que eu estou com sono , amanhã eu volto a explicar o código em detalhes: Código da página default.aspx :

 

<%@ Page Language="VB" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OLEDB" %>

<html>
<head>
<meta name="GENERATOR" Content="ASP Express 2.1">
<title>Login</title>

<script language="VB" runat="server">

Dim strNome as string
Dim intCode as Integer
Dim strSenha as string
Dim MyConn as OLEDBConnection
Dim objDR as OLEDBDatareader
Dim Cmd as OLEDBCommand
Dim opcao as Integer
Dim bprimeirologin as Boolean

Sub dologin(Source as Object, E as EventArgs)

Dim strConn as string ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/inetpub/wwwroot/dados/BolaoF1.mdb"
Dim MySQL as string = "Select CodigoParticipante , NomeParticipante , Chave , Senha , primeirologin from Participantes Where Chave = '" & lguid.text & "' and Senha = '" &
CripSenha(lgPWD.text) & "'"

Dim MyConn as New OleDbConnection(strConn)
Dim Cmd as New OleDbCommand(MySQL, MyConn)

MyConn.Open()
objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)

if Not objDR.Read() then
   label1.text = "<h1><b>Chave / Senha Inválidas !</b></h1></p>"
   objDR.Close
   Myconn.Close
else
   objDR.close
   Myconn.Open

   While objDR.Read()
      strNome=objDR("NomeParticipante")
      intCode=objDR("CodigoParticipante")
      bprimeirologin=objDR("primeirologin")
   End While


   Session("Codigo")=intCode
   Session("nome")=strNome

   if bprimeirologin then
        response.Redirect("http://localhost/f1/cadastra.aspx")
    else
        response.Redirect("http://localhost/f1/f1.htm")
   end if

End If

 

Function CripSenha(strSenha As String) As String

'A mesma rotina encripta e descripta
Dim nLetra as string
dim cSenha as string
dim L as integer

strSenha = Trim(strSenha)
For L = 1 To Len(strSenha)
  nLetra = Asc(Mid(strSenha, L, 1))
  nLetra = Chr(Trim(Str(Val(nLetra) Xor (L * 2))))
  cSenha = cSenha & nLetra
Next

 

End Function
 

End Sub
</script>

</head>
<body bgcolor="white">
<form Name="frmSignup" runat="server">

<asp:placeholder ID="ph2" visible="true" runat="server">
<p align="center"><font face="Verdana" size="5" color="#000080">
<span style="font-weight: 700; background-color: #FFFFFF">SUPER BOLÃO - FÓRMULA 1</span></font></p>
<p align="center">
<img border="0" src="senn7.gif" width="300" height="178"></p>
<br>

<table border="0" align="center">
 <tr>
 <td align="right" valign="Top"><b>Chave : </b></td>
 <td align="Left" valign="Top"><asp:TextBox id="lguid" runat="server" /></td>
 </tr>
 <tr>
 <td align="Right" valign="Top"><b>Senha: </b></td>
 <td align="Left" valign="Top"><asp:TextBox id="lgpwd" runat="server" /></td>
 </tr>
 <tr>
 <td align="Center" valign="Top" Colspan="2">
 <asp:Button id="buttonlg" Text="Entrar" onclick="dologin" runat="server" />
 </td>
 </tr>
</table>
 

</asp:placeholder>
  <table border=0 align="center">
   <tr><td>
      </form><asp:Label ID="label1" runat="server" />
   <tr></td>
 </table>

</body>
</html>

 

Você pode acessar a página em : http://www.visualbasic.mat.br/f1/default.aspx .

 

Como funciona ?

 

1- Definimos a string de conexão para acessar o base de dados BolaF1.mdb informando o caminho completo.

Dim strConn as string ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/inetpub/wwwroot/dados/BolaoF1.mdb"
 

Como estamos fazendo uma conexão com uma base de dados Access usamos um provedor OLE DB.

 

2- A instrução SQL seleciona no banco de dados o usuário com a chave e senha informados :

Dim MySQL as string = "Select CodigoParticipante , NomeParticipante , Chave , Senha , primeirologin from Participantes Where Chave = '" & lguid.text & "' and Senha = '" & lgPWD.text & "'"
 

3-  Definimos a seguir a conexão e criamos um objeto Comando na conexão criada

Dim MyConn as New OleDbConnection(strConn)
Dim Cmd as New OleDbCommand(MySQL, MyConn)

 

4- Abrimos a conexão e a seguir executamos o comando para gerar um DataReader com os dados selecionados. Note que o parâmetro usado fecha a conexão em seguida.

MyConn.Open()
objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)
 

5- Verificamos se o objeto DataReader está vazio , se isto ocorrer , informamos que a chave/senha são inválidos , caso contrário atribuímos os campos NomeParticipante, CodigoParticipante e primeirologin as variáveis pré-definidas.

if Not objDR.Read() then
   label1.text = "<h1><b>Chave / Senha Inválidas !</b></h1></p>"
   objDR.Close
   Myconn.Close
else
   objDR.close
   Myconn.Open

   While objDR.Read()
      strNome=objDR("NomeParticipante")
      intCode=objDR("CodigoParticipante")
      bprimeirologin=objDR("primeirologin")
   End While


   Session("Codigo")=intCode
   Session("nome")=strNome
...

 

6- A seguir verificamos se é o primeiro logon que o usuário faz . A variável bprimeirologin informa isto. Se for o primeiro logon chamamos a página cadastra.aspx para que o usuário altere sua senha.

   if bprimeirologin then
        response.Redirect("http://localhost/f1/cadastra.aspx")
    else
        response.Redirect("http://localhost/f1/f1.htm")
   end if
 

Observe que estamos usando a função CripSenha para ofuscar a senha , assim a senha salva no banco de dados fica um pouco mais protegida. É claro que esta proteção é relativamente fácil de quebrar mas é melhor do que salvar a senha diretamente como foi digitada.

 

Function CripSenha(strSenha As String) As String

'A mesma rotina encripta e descripta
Dim nLetra as string
dim cSenha as string
dim L as integer

strSenha = Trim(strSenha)
For L = 1 To Len(strSenha)
  nLetra = Asc(Mid(strSenha, L, 1))
  nLetra = Chr(Trim(Str(Val(nLetra) Xor (L * 2))))
  cSenha = cSenha & nLetra
Next

 

End Function

 

A mesma rotina gera a senha criptografada e é usada para ler a senha do banco de dados. Acessa a página de Login em : http://www.macoratti.net/f1/default.aspx .

 

Eu cadastrei dois usuários : Macoratti e Convidado cujas chaves e senhas são :  macoratti/123456  e guest/123456.

 

Você terá acesso ao site que simula um bolão de formula1. As opções estão ativas mas eu não testei todas ainda. Você poderá incluir aposta , alterar sua aposta , ver sua aposta e ver a aposta do grupo ( somente os dois usuários cadastrados ).

 

Estarei falando com mais detalhes do site em futuros artigos.  Entre no site e divirta-se...  

 

Até mais o próximo ASP.NET...


José Carlos Macoratti