|
<< Click to Display Table of Contents >> Autenticação via form (login) |
![]() ![]()
|
Introdução
Para montar um sistema de autenticação no seu site via formulário é muito simples.
•Não utiliza Membership do Asp.net
•Pode utilizar com seu próprio banco de dados ou até com xml (não recomendado)
Segue abaixo um passo-a-passo mais simples possível:
Passo-a-passo
Crie um novo web-site em branco e adicione 2 web forms com nome de Default.aspx e P1.aspx
Edite o Web.config conforme dica no final deste tópico.
Na página P1.aspx coloque um componente LoginView
Coloque-o no modo AnonymousTemplate

E adicione no código:
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
Bem vindo, você precisa estar logado.
</AnonymousTemplate>
</asp:LoginView>
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" />
Agora mude o modo para LoggedIn e adicione:
<LoggedInTemplate>
Bem vindo <asp:LoginName ID="LoginName1" runat="server" FormatString="Olá {0}!" />
</LoggedInTemplate>
No final fica tudo assim:
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
Bem vindo, você precisa estar logado.
</AnonymousTemplate>
<LoggedInTemplate>
Bem vindo <br /> <asp:LoginName ID="LoginName1" runat="server" FormatString="Olá {0}!" />
</LoggedInTemplate>
</asp:LoginView>
<br />
<asp:LoginStatus ID="LoginStatus1" runat="server" />
Na página Default.aspx coloque um componente Login
Dê um duplo-clique sobre o componente e escreva:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Login1.Password == "123")
{
e.Authenticated = true;
// isso grava o usuário que logou num cookie local temporário
FormsAuthentication.SetAuthCookie(Login1.UserName, false);
// retorna para página que chamou
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, false);
}
else
{
e.Authenticated = false;
}
}
Pronto!
Rode o projeto.
Tente acessar o P1.aspx diretamente. Ele mostra que é necessário logar.
Agora volte para Default.aspx e logue com qualquer nome e senha 123.
Acesse o P1.aspx. Agora você está autenticado
Web.config
O segredo para o sistema não "buscar" os dados no MS SQL Server está aqui
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="Default.aspx"
protection="All"
timeout="30"
name=".ASPXAUTH"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="Default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
<httpModules>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</httpModules>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</configuration>
Observações
Num ambiente um pouco mais complexo.
Página |
Obs |
Default.aspx |
Todos podem acessar, contém link para todas demais páginas |
Login.aspx |
Contém componente Login com o código do exemplo acima |
P1.aspx |
Exatamente como no exemplo acima - acesso anonimo |
Secreta.aspx |
Com uma mensagem - acesso restrito |
Secreta2.aspx |
Com uma mensagem - acesso restrito |
Acesso livre: Default, Login e P1
Para controlar isso, é no Web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="login.aspx"
protection="All"
timeout="30" <---- atenção ao timeout
name=".ASPXAUTH"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="Default.aspx"
cookieless="UseDeviceProfile"
enableCrossAppRedirects="false" />
</authentication>
<httpModules>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</httpModules>
<authorization>
<deny users="?"/> Todas as demais páginas é necessário autenticação
</authorization>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="?"/> Permite usuários não autenticados
</authorization>
</system.web>
</location>
<location path="P1.aspx">
<system.web>
<authorization>
<allow users="?"/> Permite usuários não autenticados
</authorization>
</system.web>
</location>
</configuration>