Autenticação via form (login)

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > ASP Controls >

Autenticação via form (login)

Previous pageReturn to chapter overviewNext page

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

 

LoginView1

 

 

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>