WebMatrix
- Segurança e MemberShip - II
Na primeira parte deste artigo abordei os conceitos do helper WebSecurity e hoje vou mostrar como aplicar esses conceitos criando uma página de registro de usuário.
Nossa página de registro de usuário seguirá o modelo padrão: irá fornecer um formulário contendo uma caixa de texto com o nome do usuário e outra caixa de texto para informar a senha.
Quando o usuário enviar o formulário, vamos verificar se a conta de usuário com este nome ja não existe e se o valor da senha confere.
Se estas duas condições forem atendidas, vamos fazer o log out de qualquer usuário atual, criar a nova conta, e fazer o log in para o novo usuário exibindo uma mensagem de sucesso.
Vamos partir do site SegurancaMembros criado na primeira parte do artigo.
Abra então o site SegurancaMembros no WebMatrix clicando em My Sites e selecionando o site SegurancaMembros:
![]() |
Vamos incluir uma nova página chamado Registro.cshtml na raiz do nosso site;
Clique no item do menu New->New File;
A seguir escolha o template CSHTML e informe o nome Registro.cshtml e clique em OK;
Em seguida inclua o código abaixo no arquivo Registro.cshtml:
![]() |
Esta página ao ser executada irá produzir o seguinte resultado:
![]() |
Precisamos mais que isso para implementar o registro de membros, então vamos incluir o código no topo da página para ser executado no postback. Este código deverá realizar as seguintes tarefas:
Fazer o log
out de qualquer usuário atual (através do método
WebSecurity.Logout());
Verificar se o nome de usuário enviado no formuluário
já não existe (através do método WebSecurity.UserExists).
Comparar os valores das duas caixas de texto de senha para
garantir que eles correspondem.
Finalmente, se toda a validação passou, vamos chamar o método WebSecurity.CreateUserAndAccount() para inserir a nova conta no banco de dados, fazer o login do usuário e devolvê-lo para a página padrão.
O código abaixo a ser incluído é o seguinte:
@{ var username = ""; var password1 = ""; var password2 = ""; if(IsPost) { WebSecurity.Logout(); username = Request["username"]; password1 = Request["password1"]; password2 = Request["password2"]; // faz a validação if (username.IsEmpty()) { ModelState.AddError("username", "O usuário é obrigatório."); } if (password1.IsEmpty()) { ModelState.AddError("password1", "A senha deve ser informada."); } if(WebSecurity.UserExists(username)) { ModelState.AddError("username", "Uma conta com este nome já existe."); } if(password1 != password2) { ModelState.AddError("password1", "As senhas não conferem."); } // Cria a conta if(ModelState.IsValid) { WebSecurity.CreateUserAndAccount(username, password1, null, false); WebSecurity.Login(username, password1); Response.Redirect("default"); } } } |
No código acima utilizamos quatro métodos do helper WebSecurity:
Uma vez que temos a certeza de que a conta não existe, passamos ao método CreateUserAndAccount() o nome de usuário e senha da conta a ser criada e, em seguida, chamamos o método Login(), passando novamente o nome de usuário e senha.
Após isso teremos também que incluir código para exibição do resultado das validações do erros.
Começamos definindo um estilo entre as tags <stile> e usamos o @Html.ValidationSummary para exibir os erros.
O método ValidationSummary retorna uma lista não ordenada (elemento ul) de mensagens de validação que estão no objeto ModelStateDictionary.
O código HTML da página Default.aspx ficará assim:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Registrar Usuário</title> <style> .validation-summary-errors, span.field-validation-error { color: #FF0000; } input.field-validation-error { border: 1px solid #FF0000; background-color: #FFCCCC; } </style> </head> <body> <h1>Registrar</h1> @Html.ValidationSummary("Não foi possível criar a conta. Corrija os seguintes erros: ") <form action="register" method="post"> <div> @Html.Label("Usuário: ", "username")<br /> @Html.TextBox("username", username) @Html.ValidationMessage("username") </div> <div> @Html.Label("Senha: ", "password1")<br /> @Html.Password("password1", password1) @Html.ValidationMessage("password1") </div> <div> @Html.Label("Confirma Senha: ", "password2")<br /> @Html.Password("password2", password2) </div> <div> <input type="submit" value="Registrar" /> </div> </form> </body> </html> |
Executando a página Registro.cshtml e tentando submeter o formulário vazio teremos o seguinte resultado:
![]() |
Quando uma conta for registrada com sucesso o usuário será redirecionado de volta para página padrão e as linhas contendo a informação da conta serão inseridas nas tabelas UserProfile e webpages_Membership do nosso banco de dados.
![]() |
![]() |
informando o usuário e a senha e clique em Registrar para submeter o formulário teremos a criação da conta do usuário.
Podemos seleciona a guia DataBases e abrir as tabelas do banco de dados MembroExemplo.sdf e verificar os dados gravados:
![]() |
Observe que a senha é armazenada na tabela webpages_Membership como um hash seguro em vez de texto simples.
Em seguida, vamos criar um helper chamado ResumoConta, que podemos usar para exibir informações de login para o usuário nas páginas do nosso site. Com este helper faremos o seguinte:
Para criar o ajudante ResumoConta vamos criar uma pasta App_Code na raiz do site.
Clique com o botão direito sobre o site SegurancaMembors e selecione a opção New Folder e a seguir informe o nome App_Code;
No interior da pasta App_Code, adicione um arquivo chamado MembrosHelper.cshtml:
Clique no item do menu New->New File;
A seguir escolha o template CSHTML e informe o nome MembrosHelper.cshtml e clique em OK;
Depois substitua o código padrão gerado pelo seguinte código:
![]() |
O código do helper é simples.
- Examinamos a propriedade WebSecurity.IsAuthenticated para obter o status de autenticação do usuário atual. Se o usuário estiver autenticado, exibimos o valor da propriedade WebSecurity.CurrentUserName, que contém o nome do usuário autenticado. Exibimos o nome de usuário como um link para a página changePassword.
- Ao lado do nome de usuário, nós exibimos um link para uma página que irá permitir que o usuário saia do site, este é um recurso de segurança importante para os usuários que podem estar em um computador público ou compartilhado.
- Se o usuário atual não esta autenticado (usuário anônimo), exibimos links para as páginas de login e registro. Atualmente apenas a página de registro existe, vamos adicionar as páginas de login, logout, e a página ChangePassword posteriormente.
Finalmente, para exibir o helper ResumoConta na página inicial, precisamos adicionar uma chamada para MembrosHelpers.ResumoConta() na página Default.cshtml.
Vamos alterar o código da página Default.chtml conforme abaixo:
![]() |
Executando o site iremos obter a seguinte página:
![]() |
Na continuação deste artigo irei criar as demais páginas e implementar as funcionalidades para login, logout e changePassword;
Pegue o projeto completo aqui:
SegurancaMembros2.zip
Salmos 9:9
O Senhor é também um alto refúgio para o oprimido, um alto refúgio em tempos de angústia.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Baixe o WebMatrix aqui : http://www.microsoft.com/web/webmatrix/
http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership