ASP.NET  - Criando um NotePad para web II


Esta é a segunda parte do meu artigo  ASP.NET  - Criando um NotePad para web I e  continuando vou mostrar como criar a página de Login : Login.aspx.

Apenas para lembrar temos abaixo a página principal Default.aspx e a página de Login, Login.aspx :

Página com menu da aplicação web com TreeView

Página de Login com uso do recurso CAPTCHA

A página de Login apresenta as seguintes funcionalidades:

Para começar abra o projeto iniciado no artigo anterior e inclua um novo WebForm a partir do menu WebSite -> Add New Item com o nome Login.aspx;

Agora vamos criar a página de Login incluindo os seguintes componentes a partir da ToolBox:

        <table class="titulo">
                <
tr><td>Macoratti.net</td></tr>
         </
table
>

        <p>
                <
em class="aviso">(Nota: Se vocˆ nÆo conseguir ler os numeros <br>
                carregue a p gina novamente para gerar uma nova imagem.)</em>
       </
p
>

O resultado final deverá ser o leiaute apresentado na figura abaixo:

A funcionalidade da validação usando imagem usando CAPTCHA eu já expliquei no artigo : ASP .NET - Usando validação por imagem - CAPTCHA 
O recurso foi usado na página de Login  exatamente como foi explicado no artigo.

Altere para o modo Source e a partir da ToolBox, guia AJAX ToolKit 3.5 arraste e solte , logo abaixo do controle TextBox - txtSenha , o componente PasswordStrength;

Esse componente será usando para dar uma indicação visual ao usuário do texto da senha informado no TextBox - txtSenha informando se a senha é fraca , razoável ou boa ele trabalha com conjunto com um arquivo .css para modelar o modo de apresentação desta informação. Vejamos configurar este componente.

A seguir temos o trecho do código referente ao controle TextBox(txtSenha) e ao componente PasswodStrength na página Login.aspx:

. . . . . . . .
<td>

<asp:TextBox ID="txtsenha" runat="server" EnableViewState="False" TextMode="Password"></asp:TextBox>

<cc1:PasswordStrength ID="txtsenha_PasswordStrength" runat="server"  TargetControlID="txtsenha" StrengthIndicatorType="text"

              MinimumNumericCharacters="1"   MinimumSymbolCharacters="1"    PreferredPasswordLength="6"

              RequiresUpperAndLowerCaseCharacters="true" TextStrengthDescriptions="Muito Fraca; Fraca; Razoavel; Boa ; Muito Boa"

             TextStrengthDescriptionStyles="Muito Fraca; Fraca; Razoavel; Boa; Muito Boa" PrefixText="Segurança: ">

</cc1:PasswordStrength>

</td>
......

A primeira coisa que devemos fazer  é informar sobre qual controle o componente PasswordStrenght irá no caso o controle txtSenha configurando a propriedade TargetControlID com o nome do controle que no caso será: TargetControlID="txtsenha"

A seguir definimos o tipo de indicador usado , no caso , estamos usando o tipo Text : StrengthIndicatorType="Text"  outra possibilidade é BarIndicator que exibe a informação em uma barra de progresso.

A seguir temos as seguintes definições::

Com estas definições teremos o componente funcionando corretamente para exibir a informação do nível de segurança da senha informada pelo usuário na caixa de texto txtSenha.

Vamos agora ao código que irá efetuar a verificação e autenticação do usuário bem como a validação por imagem CAPTCHA.

Primeiro definimos os namespaces usados:

Imports System.Data
Imports
System.Data.OleDb

A seguir definimos uma variável para gerar os caracteres de forma randômica:

' cria um codigo aleatorio que sera arrmazenado na sessÆo
Private random As New Random()

No evento Load da página temos o código a seguir:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


lbl_Mensagem.Text =
"Login"


If
Not Me.IsPostBack
Then

     Me.Session("CaptchaImageText") = GeraCodigoAleatorio()

Else

     verificaCaptcha()

End If

End Sub

A seguir o código da função GeraCodigoAleatorio() que irá retornar um texto contendo 7 caracteres aleatórios que irão gerar a imagem;

Private Function GeraCodigoAleatorio() As String
 

' Retorna uma string de sete digitos aleatorios

Dim s As String = ""

For i As Integer = 0 To 6

    s = [String].Concat(s, Me.random.[Next](10).ToString())

Next

Return s

End Function

A função verificaCaptcha() que irá verificar se o código informado pelo usuário no TextBox txtCodigoNumerico.text é igual a imagem exibida;

Private Function verificaCaptcha() As Boolean

''

If Me.txtCodigoNumerico.Text = Me.Session("CaptchaImageText").ToString() Then

' exibe uma mensagem de aviso

Me.lbl_Mensagem.Text = "C¢digo Correto."

Return True

Else

'exibe uma mensagem de erro

Me.lbl_Mensagem.Text = "Código Incorreto."

''

' limpa a entra e cria um novo codigo aleaorio

Me.txtCodigoNumerico.Text = ""

Me.Session("CaptchaImageText") = GeraCodigoAleatorio()

Return False

End If

End Function

 

E finalmente o código associado ao evento Click do botão Log In que irá efetuar a autenticação do usuário , senha e validação CAPTCHA;

Após obter o caminho e o provedor do arquivo de configuração fazemos a conexão com o banco de dados e selecionamos da tabela Usuarios o usuário com o nome informado. A seguir verificamos o nome , a senha e em seguida a validação do código numérico informado;

Protected Sub Btn_Login_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn_Login.Click

 

Dim conn As New OleDbConnection

Dim ConexaoCmd As New OleDbCommand

Dim Usuarios As OleDbDataReader

''

'obtem o caminho e a string de conexÆo a partir do arquivo de configura‡Æo

Dim caminhoBD As String = ConfigurationManager.AppSettings("caminhoBD")

Dim conexaoBD As String = ConfigurationManager.AppSettings("conexaoBD")

''

If Me.txtusuario.Text = "" Or Me.txtsenha.Text = "" Then

    Me.lbl_Mensagem.Text = " Informe o nome do usu rio e a senha. "

    txtCodigoNumerico.Text = ""

    Exit Sub

End If

''

conn.ConnectionString = conexaoBD & Server.MapPath(caminhoBD)

ConexaoCmd.Connection = conn

''

'seleciona o usu rio da base de dados pelo nome informado

ConexaoCmd.CommandText = "select * from Usuarios where Nome = '" & txtusuario.Text & "'"

''

Try

   conn.Open()

   Usuarios = ConexaoCmd.ExecuteReader(Data.CommandBehavior.CloseConnection)

Catch ex As Exception

   'ocorreu um erro ao acessar o banco de dados

   Me.lbl_Mensagem.Text = "Ocorreu um erro ao acessar os dados dos usu rios."

   Me.lbl_Mensagem.Text = Me.lbl_Mensagem.Text & vbCrLf & ex.Message

   Exit Sub

End Try

While Usuarios.Read

   If String.Compare(Usuarios("Nome"), Me.txtusuario.Text) = 0 Then

    ' o usu rio existe

     ' vamos verificar a senha

         If String.Compare(Usuarios("senha").ToString, Cripto.geraHash(Me.txtsenha.Text.Trim())) <> 0 Then

           ' senha nao confere

               Me.lbl_Mensagem.Text = "Senha Inv lida"

           txtCodigoNumerico.Text = ""

           Usuarios.Close()

               Exit Sub

          Else

              'senha confere vamos verificar o captcha

            If verificaCaptcha() Then

                      ' o usuario e a senha sÆo validos,

                     ' vamos salvar na sessÆo e redirecionar

                      ' para a pagina principal

                 Session.Add("uNome", Usuarios("Nome").ToString)

                 Session.Add("uID", Usuarios("usuarioID"))

                 Session.Add("uPerfil", Usuarios("perfil"))

                 Usuarios.Close()

                 Response.Redirect("Principal.aspx")

                       Exit Sub

          Else

            Exit Sub

         End If

     End If

   End If


  
Me.lbl_Mensagem.Text = "Nome do usu rio inv lido."

  txtCodigoNumerico.Text = ""

   Exit Sub

End While


Usuarios.Close()

Me.lbl_Mensagem.Text = "NÆo existem usuarios cadastrados."

txtCodigoNumerico.Text = ""


End
Sub

Executando o projeto e indo para página de Login teremos:

No próximo artigo irei mostrar a criação da página para Cadastrar( novoUsuario.aspx) um novo usuário.

Veja a continuação do artigo em : ASP.NET  - Criando um NotePad para web III

Até lá...


José Carlos Macoratti