ASP.NET  - Criando um NotePad para web III


Esta é a terceira parte do meu artigo  ASP.NET  - Criando um NotePad para web I e  continuando vou mostrar como criar a página para cadastrar um novo usuário: novoUsuario.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

Para poder usar o Super Editor - NotePad - Web o usuário deve efetuar o seu cadastro que  por questões didáticas requer apenas a informação de um nome de usuário e de uma senha. (Fica a seu critério incrementar as informações para a efetivação do cadastro.)

Para efetivar o seu cadastro o usuário deverá clicar na opção Cadastro do menu , na página principal Default.aspx.

Na figura 1.0 abaixo temos uma visão da página onde o usuário deve informar o nome e a senha. Na figura 2.0 temos o leiaute da página onde percebemos a utilização do ScriptManager e do controle AJax PasswordStrength.

Fig 1.0 - Tela para efetivar o cadastro do usuário Fig 2.0 - O leiaute da página para cadastrar usuário novoUsuario.aspx

Na página novoUsuario.aspx estamos usando o recurso de indicação de senha segura através de utilização do controle PasswordStrength do Ajax Control Toolkit e isso já foi comentado no artigo anterior.

Os controles TextBox, Button e Label  que compõe a página estão alinhados em uma tabela centralizada na página.

A página efetua o cadastro de um novo usuário e verifica se o  nome do usuário informado já esta cadastrado; neste caso um aviso é exibido ao usuário.

Quando o usuário clicar no botão Submeter estamos executando um código associado ao evento Click do controle Button existente no arquivo code-behind novoUsuario.aspx.vb

 

 

A seguir temos o código do evento Click do botão Submeter:

 

Protected Sub Btn_Submit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn_Submeter.Click

 

Dim conn As New OleDbConnection

Dim comm As New OleDbCommand

Dim Users As OleDbDataReader

Dim senhaHash As String = ""

'obtem o caminho e o provedor do arquivo de configura‡Æo

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

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

'se o usuario e a senhae estiverem vazios avisa

If Me.txt_usuario.Text = "" Or Me.txt_senha.Text = "" Then

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

     Exit Sub

End If

 

'define a string de conexao

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

comm.Connection = conn

'define o comando sql

comm.CommandText = "select * from Usuarios"

Try

   conn.Open()

   Users = comm.ExecuteReader(Data.CommandBehavior.CloseConnection)

Catch ex As Exception

    Me.lbl_Mensagem.Text = ex.Message.ToString

    Exit Sub

End Try

 

While Users.Read

   If String.Compare(Users("Nome").ToString.ToLower, Me.txt_usuario.Text.ToLower) = 0 Then

        ' nome do usuario foi encontrado

         Me.lbl_Mensagem.Text = "O nome do usuario informado ja  existe, tente outro nome."

       Users.Close()

         Exit Sub

   End If

End While

 

Users.Close()

 

senhaHash = Cripto.geraHash(txt_usuario.Text.Trim())


comm.CommandText =
"INSERT INTO Usuarios(Nome,Senha,perfil) VALUES ('" + Me.txt_usuario.Text + "','" + Cripto.geraHash(Me.txt_senha.Text.Trim()) + "','" + "user" + "')"


Try

   conn.Open()

   comm.ExecuteNonQuery()

   conn.Close()

   Response.Redirect("Login.aspx")

Catch ex As Exception

   Me.lbl_Mensagem.Text = ex.Message.ToString

End Try

End Sub

Este código faz basicamente o seguinte:

- Após obter a string de conexão e o provedor do arquivo de configuração e definir a instrução SQL para selecionar todos os usuários da tabela Usuarios abrimos a conexão e geramos um DataReader contendo os dados de todos os usuários.

Try

   conn.Open()

   Users = comm.ExecuteReader(Data.CommandBehavior.CloseConnection)

Catch ex As Exception

    Me.lbl_Mensagem.Text = ex.Message.ToString

    Exit Sub

End Try

 

- Em seguida percorremos os registros o datareader obtido  comparando o nome com o nome do usuário informado. Se o nome já existir sairmos da rotina e avisamos ao usuário:


Nota: Esta não parece ser a melhor lógica para efetuar esta tarefa visto que se a tabela  Usuarios for muito grande estaremos carregando uma grande quantidade de dados desnecessária visto que poderíamos efetuar um seleção usando um filtro com o nome do usuário informado.

 

While Users.Read

   If String.Compare(Users("Nome").ToString.ToLower, Me.txt_usuario.Text.ToLower) = 0 Then

        ' nome do usuario foi encontrado

         Me.lbl_Mensagem.Text = "O nome do usuario informado ja  existe, tente outro nome."

       Users.Close()

         Exit Sub

   End If

End While

 

- Se os dados forem validados então fechamos o datareader e geramos um hash para a senha informada. Em seguida usando uma instrução INSERT INTO gravamos os dados na tabela Usuarios e redirecionamos o usuário para a página de Login. (poderíamos também já permitir o acesso ao usuário visto que o mesmo acabou de se cadastrar.)

 

Users.Close()

senhaHash = Cripto.geraHash(txt_usuario.Text.Trim())

comm.CommandText = "INSERT INTO Usuarios(Nome,Senha,perfil) VALUES ('" + Me.txt_usuario.Text + "','" + Cripto.geraHash(Me.txt_senha.Text.Trim()) + "','" + "user" + "')"


Try

   conn.Open()

   comm.ExecuteNonQuery()

   conn.Close()

    Response.Redirect("Login.aspx")

Catch ex As Exception

   Me.lbl_Mensagem.Text = ex.Message.ToString

End Try

Desta forma ao final temos o nome e um hash da senha do usuário gravados na tabela Usuarios tornando assim o armazenamento da informação mais seguro.

Estamos usando os seguintes namespaces para acessar os dados da tabela Usuarios :

Imports System.Data
Imports
System.Data.OleDb

Temos também o código abaixo definido no evento Load da página:

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

    lbl_Mensagem.Text = "Novo usuario"

End Sub

Feito o cadastro o usuário já poderá ter acesso ao Editor clicando na opção Editor do menu. Neste momento ele acionará a página Principal.aspx que apresentará o formulário onde será exibida as mensagens já escritas, se as mesmas existirem, e o botão Nova Anotação para registrar uma nova anotação.

No próximo artigo irei mostrar a criação da página Principal.aspx onde o usuário poderá registrar , visualizar e editar os textos no Super Editor - NotePad - Web.

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

Até lá...


José Carlos Macoratti