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 ExceptionMe.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())
Try conn.Open() comm.ExecuteNonQuery() conn.Close() Response.Redirect( "Login.aspx") Catch ex As ExceptionMe.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 ExceptionMe.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 ExceptionMe.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.DataTemos 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