by Israel Aece
2. May 2006 21:27
A onda do momento é o Framework Atlas para processamento de códigos server-side, sem a necessidade da reconstrução completa da página. Isso torna a aplicação Web muito parecida com aplicações Windows, deixando-a muito mais interativa.
Devido a isso, nas últimas versões do Atlas (ainda em versões não Release), a Microsoft implementou métodos dentro de um determinado objeto para trabalhar diretamente com a API de Membership, sem a necessidade de um refresh e a reconstrução da página toda. O objeto que disponibiliza estes serviços chama-se Sys.Services.AuthenticationService e é um objeto desenvolvido em Javascript. Este, por sua vez, têm três métodos, os quais analisaremos as suas utilidades na tabela abaixo:
| Método |
Descrição |
| validateUser |
Este método recebe dois parâmetros: login e senha, e se encarrega de validar junto ao Membership padrão que encontra-se configurado para a aplicação, se as credenciais informadas são ou não válidas, retornando um valor booleano com essa indicação.
|
| login |
Este método possui basicamente a mesma funcionalidade que o validateUser, mas com uma diferença: além de validar as credenciais e estas estiverem válidas, ele já devolve para o browser o cookie de autenticação especificado no FormsAuthentication. É importante dizer que este método também recebe um parâmetro booleano que indica se o cookie será ou não persistente.
|
| logout |
Efetua a saída do usuário, limpando o cookie. |
|
Quando adicionamos um projeto ASP.NET Atlas no Visual Studio .NET 2005, a autenticação via Altas vem desabilitada no Web.Config e é necessário habilitarmos para fazer o uso do objeto de autenticação. Para se certificar disso, é necessário que o arquivo Web.Config da aplicação ASP.NET Atlas contenha as seguintes entradas:
<sectionGroup
name="microsoft.web"
type="Microsoft.Web.Configuration.MicrosoftWebSectionGroup">
<!-- outras seções -->
<section
name="webServices"
type="Microsoft.Web.Configuration.WebServicesSection"
requirePermission="false" />
<section
name="authenticationService"
type="Microsoft.Web.Configuration.AuthenticationServiceSection"
requirePermission="false" />
</sectionGroup>
<!--
Certifique-se de que o Provider padrão esteja configurado
corretamente e apontando para uma base de dados válida.
As seções de configurações de SqlMembershipProvider
foram suprimidas para poupar espaço, mas não muda nada
em relação aos exemplos anteriores.
-->
<webServices enableBrowserAccess="true" />
<authenticationService enabled="true" />
|
Notem que há um elemento chamado webServices que neste cenário, é responsável por efetuar a autenticação. Na página que fará a autenticação via Atlas você notará que não se tem código em VB.NET ou C#, tudo será escrito utilizando Javascript. Acredito que, como já aconteceu com alguns controles, nas próximas versões isso já esteja encapsulado em controles drag-and-drop. Para iniciarmos o entendimento da estrutura cliente, a página irá conter um controle do tipo ScriptManager, o qual tem a finalidade de expor (código cliente) grande parte das funcionalidades e controles do Atlas.
É através do controle ScriptManager que temos acesso ao objeto Sys.Services.AuthenticationService. Agora que já temos acesso à ele, resta codificar para efetuarmos o login do usuário. Como qualquer outro sistema de Login, é necessário termos dois controles TextBox e um Button. Teremos também Label para exibirmos a mensagem de autenticado/não autenticado para o usuário saber se foi ou não autenticado com sucesso. O código é mostrado abaixo:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<atlas:ScriptManager
ID="scriptManager"
runat="server"
EnableScriptComponents="false" >
</atlas:ScriptManager>
</head>
<body>
<form id="form1" runat="server">
<span id="TextoLogado"
style="visibility:hidden;color:Green"
visible="false">
<b>Logado.</b>
</span>
<span
id="TextoNaoLogado"
style="visibility:visible;color:Red">
<b>Não logado.</b>
</span>
<br /><br />
Login: <input type="text" id="txtLogin" />
<br />
Senha: <input type="password" id="txtSenha" />
<br /><br />
<button id="btnEnviar" onclick="OnSubmitLogin()">Efetuar Login</button>
<script type="text/javascript" language="JavaScript">
var login = document.getElementById('txtLogin');
var senha = document.getElementById('txtSenha');
var lblLogado = document.getElementById('TextoLogado');
var lblNaoLogado = document.getElementById('TextoNaoLogado');
var buttonLoginLogout = document.getElementById('btnEnviar');
function OnSubmitLogin() {
Sys.Services.AuthenticationService.login(
login.value,
senha.value,
false,
OnLoginComplete);
return false;
}
function OnLoginComplete(result) {
senha.value = '';
if (result) {
login.value = '';
lblLogado.style.visibility = "visible";
lblNaoLogado.style.visibility = "hidden";
buttonLoginLogout.innerText = "Efetuar Logout";
buttonLoginLogout.onclick = OnSubmitLogout;
}
else {
lblLogado.style.visibility = "hidden";
lblNaoLogado.style.visibility = "visible";
}
}
function OnSubmitLogout() {
Sys.Services.AuthenticationService.logout(OnLogoutComplete);
return false;
}
function OnLogoutComplete(result) {
lblLogado.style.visibility = "hidden";
lblNaoLogado.style.visibility = "visible";
buttonLoginLogout.innerText = "Efetuar Login";
buttonLoginLogout.onclick = OnSubmitLogin;
}
</script>
</form>
</body>
</html>
|
No exemplo acima utilizamos o método login para autenticar o usuário e, via Javascript, fazemos as manipulações necessárias para assim que o método login retornar o valor (com sucesso ou não), o layout é ajustado, exibindo uma mensagem de que o usuário foi autenticado com sucesso.
Informamos ao método login, além do login e senha do usuário (recuperado dos TextBoxes), um parâmetro booleano que indica se o cookie vai ou não ser persistente. O último parâmetro é a função de callback, a qual será disparada assim que o método de login finalizar o processamento, já que o mesmo é processado assincronamente. Já para o método logout (que irá chamar o método Logout da classe FormsAuthentication), você passa apenas o método que será disparado assim que o método for finalizado, e é neste método que você fará a manipulação do layout para dar um feedback ao usuário que, no caso acima, apenas alteramos o valor do Label para "Não Logado.".
Este exemplo foi baseado na versão de 06/04/2006 do Atlas e os códigos mostrados acima são baseados no exemplo exibido nos QuickStarts do Atlas. É possível que nas versões futuras do Atlas este objeto de autenticação client-side possa mudar.