Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

caezar

Acesso restrito

Recommended Posts

Amigos,

 

Construi uma pagina em asp.net com o Visual 2008 que da acesso a uma outra pagina. Só que nesta pagina só teria acesso o usuário que se logar.

 

Alguem tem uma idéia ou um exemplo de como criar esse acesso?

 

Criei uma tabela no access chamada user que contem os campos:

Nome, Usiário, Senha, Email

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa não consegui entender sua dúvida. Quer todo o código?

 

Abraços...

 

Na verdade eu quero um exemplo usando o access de uma pagina que para ter acesso precisamos de logon.

 

Exemplo:

 

Na pagina principal tem 2 textbox chmados: Usuário e Password

O Usuário que tem seu cadastro na base se loga e na proxima pagina aparece algo do tipo:

"Olá, [usuário]"

Se o usuário que se logar não tiver cadastro ele não tem acesso.

 

Não sei se é simples, pois estou começando em .net...

 

abs e obrigado pela resposta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Masters,

 

Web.Config cria uma sessão de autenticação:

 

<authentication mode="Forms">
  <forms name="Acesso" loginUrl="pages/login.aspx" timeout="20">
     <credentials passwordFormat="MD5">
        <user name="admuser" password="202CB962AC59075B964B07152D234B70"/>
     </credentials>
</forms>
</authentication>

No exemplo acima eu informei que meu site é autenticado pela página Login.ASPX e que a duração do logim por INATIVIDADE é de 20 minutos.

Criei ainda um usuário Adminsitrador do Site.. que não estar´no base de dados chamado ADMUSER e a senha esta criptografada em MD5

 

Ainda no Web.Config crie uma sessão dizendo qual area do seu site precisa de autenticação:

 

<location path="pages/private">
   <system.web>
      <authorization>
         <deny users="?"/>
      </authorization>
   </system.web>
</location>

No código acima eu informo que todas as paginas da pasta private não poderão ser acessadas de maneira anonima.

 

Agora na minha pagina de login que tem apenas dois textbom e um button. Eu implemento o seguinte código:

 

protected void btnLogin_Click(object sender, EventArgs e)
{
  // Caso o usuário informado não seja um usuário administrador(Definido no WebConfig) válido,
  // tenta efetuar a validação com um possível usuário cadastrado no banco de dados.
  if (!FormsAuthentication.Authenticate(txtUsuario.Text, txtSenha.Text))
  {
    // Rotina de Consulta no banco e bla bla bla.
    // Se for um usuário valido
    FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, false);
  }
  // Caso o usuário informado seja um usuário administrador(Definido no WebConfig) válido.
  else
  {                                               
    FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, false);
  }
}

Agora se você precisa guardar mais informações do usuário como (Nome Completo, E-mail, etc..) crie uma classe estatica para isso.. e guarde a classe estatica no Session que poderá estar encapsulado como uma propridade.

 

Espero te-lo ajudado! http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, para uma duvida de acesso restrito, eu sugiro que você use um método mais simples de validação.

 

1. Bem você pode criar uma tabela no BD com os dados do usuario.

 

2. Você cria um formulario com campos txtLogin e txtSenha.

 

3. Pega os valores desses campos compara com os dados.

 

4. Se consulta retornar, cria uma sessão para o usuario.

 

Exemplo:

//aqui no load da pagina você pergunta se a sessão existe, ou seja se o usuario já está logado.
 protected void Page_Load(object sender, EventArgs e)
    {                                                                
        if ((Session["cd_usuario"] != "") && (Session["cd_usuario"] != null))
        {
            //se o usuario estiver fechado uma aba do firefox e voltar para o sistema, sem deslogar.
            //ele continuara com a sessão ativa, logo você redireciona ele para pagina que você quer. 
            Response.Redirect("home.aspx");
        }       
    }
    protected void btnEntrar_Click(object sender, EventArgs e)
    {
        //Esse é o botão de Entrar do formulario de login que chama um metodo de autenticação.
        Autenticacao();
    }

    protected void Autenticacao()
    {
        string login = "";
        string senha = "";
        login = txtLogin.Text;
        //aqui você criptografa a senha do usuario com MD5.
        senha = FormsAuthentication.HashPasswordForStoringInConfigFile(pwSenha.Text, "MD5");
        //faz a consulta ao banco citada acima.
        Usuario U = new UsuarioAction().Retrieve(login, senha);
        //Se receber resposta, ou seja o id do usuario for > 0;
        if (U.Id >= 1)
        {
            //Cria as sessoes abaixo.
            Session["cd_usuario"] = U.Id;
            Session["nm_usuario"] = U.Nome;
            //redireciona para pagina apos logon.
            Response.Redirect("home.aspx");
        }
        else
        {
            //mensagem de erro, quando o não retorna nada na consulta.
            lblMsg.Visible = true;
            lblMsg.Text = "Usuário Inválido";
        }
    }

NOTA: Para você restringir em um determinado diretorio basta você colocar o codigo a seguir no metodo Load na MasterPage.master. E o campo criptografado da senha de ser Tipo Varchar(32).

 

       if ((Session["cd_usuario"] != "") && (Session["cd_usuario"] != null))
        {
            //se o usuario estiver fechado uma aba do firefox e voltar para o sistema, sem deslogar.
            //ele continuara com a sessão ativa, logo você redireciona ele para pagina que você quer. 
            Response.Redirect("home.aspx");
        } else{
         //redireciona para a pagina de login.
           Response.Redirect("login.aspx");
         }

Espero que tenha contribuido.

 

 

Abraço e sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem amigos,

Com Base em um exemplo de acesso que encontrei na net construi os códigos abaixo:

----------------------------------------------------------------

web.config

 

<?xml version="1.0"?>
<configuration>
	<!-- habilita a autenticacao -->
	<system.web>
		<authentication mode="Forms">
			<forms name="Exemplo" loginUrl="login.aspx"/>
		</authentication>

    <compilation debug="true"/></system.web>
	<!-- define a pagina protegida para rejeitar usuarios anonimos -->
	<location path="login-protegido.aspx">
		<system.web>
			<authorization>
				<deny users="?"/>
			</authorization>
		</system.web>
	</location>
  <appSettings>
    <add key="strConn" value= "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Caezar\Documents\Visual.net\Projeto Usuários\LoginProtegidoMacoratti\LoginProtegidoM\App_Data\Acesso.mdb" />
  </appSettings>
</configuration>

----------------------------------------------------------------

 

 

login.asp

 

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Web.Security" %>
<script runat="server">
    Function ValidaUsuario(nome As string, senha As string) As Boolean
     Dim strSQL as string = "Select * from Usuarios Where Nome=@Nome AND Senha=@Senha"
     Dim MyConn as New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))
     Dim objDR as OleDbDataReader
     Dim Cmd as New OleDbCommand(strSQL, MyConn)
     cmd.Parameters.Add(New OleDbParameter("@Nome", nome))
     cmd.Parameters.Add(New OleDbParameter("@Senha", senha))

     Try
       MyConn.Open()
       objDR=Cmd.ExecuteReader(CommandBehavior.CloseConnection)
       if objDR.Read() Then
              FormsAuthentication.RedirectFromLoginPage(objDR("Nome"), False )
       else
            saida.Visible="True"
            saida.text="Usuário/Senha Inválido(s) , tente novamente."
       End If
     Catch ex as Exception
          saida.visible="true"
          saida.text="Ocorreu um erro durante o Login : " &  "<p>" & ex.Message()
     Finally
           MyConn.Close()
     End Try
    End Function
    Sub Login(Source as Object, E as EventArgs)
       Validausuario(Nome.Text,Senha.Text)
    End Sub
</script>
<html>
<head>
</head>
<body>
    <h1>Login
    </h1>
    <hr />
    <form id="Form1" runat="server">
        <table cellpadding="8">
            <tbody>
                <tr>
                    <td>
                        Usuário :
                    </td>
                    <td>
                        <asp:TextBox id="Nome" RunAt="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        Senha   :
                    </td>
                    <td>
                        <asp:TextBox id="Senha" RunAt="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td>
                        <p align="center">
                            <asp:Button id="Button1" onclick="Login" RunAt="server" Text="Enviar"></asp:Button>
                        </p>
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
    <hr />
    <h3><asp:Label id="saida" runat="server" forecolor="Red"></asp:Label>
    </h3>
</body>
</html>

----------------------------------------------------------------

 

login-protegido.aspx

 

<%@ Page Language="VB" %>
<script runat="server">
    Sub btnLogout_OnClick(Src As Object, E As EventArgs)
        FormsAuthentication.SignOut
    End Sub
</script>
<html>
<head>
    <title>ASP.NET - Exemplo de login</title>
</head>
<body>
    <p>
        Acesso liberado: 
    </p>
    <strong>"Pagina restrita."</strong> 
    <p>
    </p>
    <form id="Form1" runat="server">
        <asp:Button id="btnLogout" onclick="btnLogout_OnClick" runat="server" text="Log Out"></asp:Button>
    </form>
    <p>
        <font color="blue">Nota: Depois de clicar no botão "Log Out" você vai precisar dar um
        'Refresh' na página. </font>
    </p>
</body>
</html>

----------------------------------------------------------------

 

Agora encontrei outros problemas, um deles é que não sei como retomar o caminho do servidor para colocar na web.

 

Outro seria: como eu guardo o nome do usuário em uma variavel?

 

E por fim:

Quando executo o sistema pelo IIS ele da um erro:

Não foi possível encontrar o arquivo 'C:\Users\Caezar\Documents\Visual.net\Projeto Usuários\LoginProtegido\LoginProtegido\Acesso.mdb'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Master,

 

Que bom que nossas sugestões o estão guiando para seu objetivo. ;)

Para mapear o enderecço de uma pasta fisica em ASP.NET é necessário o uso do comando Server.MapPath().

 


   String strCaminho = Server.MapPath("./DB/MEUBANCO.MDB");

Esta função retornará o caminho fisico do arquivo: "C:\SITES\MEUSITE\DB\MEUBANCO.MDB".

 

Na pratica esta função é usada quando o site é publicado em um servidor do qual você não sabe o caminho fisico dos arquivos.

 

Um detalhe sobre seu código: Percebi que seu site esta hospedado dentro da pasta Users\Documents de seu computador. Esta pasta é protegida não dando acessos a outros usuários que não sejam o proprio dono ou administrador. Isto quer dizer que quando você roda seu site, você esta logando com o usuário ASP.NET e não o usuário Caezar, sendo assim, seu site será impedido de acessar o arquivos.

 

Aqui vão algumas dicas:

 

1) Coloque seu site em uma pasta na raiz de seu computador.

2) Informe que o usuário ASP.NET tem acesso a esta pasta.

3) Configure seu site para acesso do tipo IMPERSONATE

<system.web>
  <identity impersonate="true" />
</system.web>

Acredito que antes de pensar em "bloquear" acessos ao seu site, você eve primeiro verificar se os acessos de seu site à seus arquivos de base de dados estão funcionando.

 

Espero te-lo ajudado! ;)

 

Atenciosamente,

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Master,

 

Que bom que nossas sugestões o estão guiando para seu objetivo. ;)

Para mapear o enderecço de uma pasta fisica em ASP.NET é necessário o uso do comando Server.MapPath().

 


   String strCaminho = Server.MapPath("./DB/MEUBANCO.MDB");

Esta função retornará o caminho fisico do arquivo: "C:\SITES\MEUSITE\DB\MEUBANCO.MDB".

 

Na pratica esta função é usada quando o site é publicado em um servidor do qual você não sabe o caminho fisico dos arquivos.

 

Um detalhe sobre seu código: Percebi que seu site esta hospedado dentro da pasta Users\Documents de seu computador. Esta pasta é protegida não dando acessos a outros usuários que não sejam o proprio dono ou administrador. Isto quer dizer que quando você roda seu site, você esta logando com o usuário ASP.NET e não o usuário Caezar, sendo assim, seu site será impedido de acessar o arquivos.

 

Aqui vão algumas dicas:

 

1) Coloque seu site em uma pasta na raiz de seu computador.

2) Informe que o usuário ASP.NET tem acesso a esta pasta.

3) Configure seu site para acesso do tipo IMPERSONATE

<system.web>
  <identity impersonate="true" />
</system.web>

Acredito que antes de pensar em "bloquear" acessos ao seu site, você eve primeiro verificar se os acessos de seu site à seus arquivos de base de dados estão funcionando.

 

Espero te-lo ajudado! ;)

 

Atenciosamente,

Angelo Compri

 

Mais uma vez obrigado pela sua resposta. Quanto ao Server.MapPath().

Eu tentei descrever no web.config desta forma mas não rolou. Deve ser alguma besteira daquelas de inesperiente mesmo:

 

<?xml version="1.0"?>
<configuration>
	<!-- habilita a autenticacao -->
	<system.web>
		<authentication mode="Forms">
			<forms name="Exemplo" loginUrl="login.aspx"/>
		</authentication>

    <compilation debug="true"/></system.web>
	<!-- define a pagina protegida para rejeitar usuarios anonimos -->
	<location path="login-protegido.aspx">
		<system.web>
			<authorization>
				<deny users="?"/>
			</authorization>
		</system.web>
	</location>
  <appSettings>
	String strCaminho = Server.MapPath("./database/acesso.MDB");
    <add key="strConn" value= "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & strCaminho />

  </appSettings>
</configuration>

E quanto a "como eu guardo o nome do usuário em uma variavel?"

Pois quero usar o nome do usuário guardado nesta variavel para retomar dados da bases com o seu perfil.

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Master..

 

Vamos lá:

1) Você não pode utilizar funcções no arquivo de configuração. Sugiro que guarde a informação de conexão em duas variaveis e quando for utilizar você trata a informação.

 

<appSettings>
  <add key="strConn" value= "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" />
  <add key="strBase" value= "./database/acesso.MDB" />
</appSettings>

2) Monte uma classe para guardar na Session contendo as informações do usuário e encapsule a session em uma classe helper (estatica) para ler as informações.

 

//Classe para guardar os dados do usuário
class DadosUsuario
{
  public int IdUsuario { get; set; }
  public string NmUsuario { get; set; }
  public string emailUsuario { get; set; }
}

Carregue esta classe com os dados do usuário:

//Carregue esta classe com os dados do usuário:
DadosUsuario du = new DadosUsuario();
du.IdUsuario = 1;
du.NmUsuario = "Angelo Compri";

// Guarde a classe na sessão do usuário
Session["Usuario"] = du;

// Para recuperar a informação em qualquer página:

DadosUsuario du = Session["Usuario"] as DadosUsuario;
if (du != null)
  Response.Write(du.NmUsuario);

Lembre-se que o você pode criar uma propriedade em sua Helper com o get e o set da session facilitando o uso.

 

Espero tê-lo ajudado! ;)

 

Abraços,

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Masters,

 

Pelo jeito este assunto sobre classes em Session pode gerar algumas duvidas.

 

Vou postar aqui, um pequeno exemplo onde utilizamos uma classe dentro de uma Session e ainda utilizamos uma Classe Estatica para recuperar os valores da Sessão.

 

Vamos iniciar criando a nossa classe que ficará na session:

 

// Classe para guardar os dados do usuário
// Lembre-se: Somente classes serializaveis podem ser colocadas em Sessão
[Serializable]
public class DadosUsuario
{
  public int IdUsuario { get; set; }
  public string NmUsuario { get; set; }
  public string emailUsuario { get; set; }
}

Agora, em nossa classe Helper vamos criar uma propriedade de lê e as informações da Session de maneira simples:

 

    public static class MyHelper
    {
        static DadosUsuario Usuario
        {
            get
            {
                if (HttpContext.Current.Session["Usuario"] is DadosUsuario)
                    return HttpContext.Current.Session["Usuario"] as DadosUsuario;
                else
                    return null;
            }
            set
            {
                if (value is DadosUsuario) 
                    HttpContext.Current.Session["Usuario"] = value; 
                else 
                    throw new Exception("Este objeto não é uma classe DadosUsuario");
            }
        }
    }

Para usar a classe Helper:

MyHelper.Usuario = new DadosUsuario();
MyHelper.Usuario.IdUsuario = 1;
MyHelper.Usuario.NmUsuario = "Angelo Compri";

//Recuperando os dados em qualquer outra página de seu site.
Response.Write(String.Format("Ola {0}, seja bem vindo!", MyHelper.Usuario.NmUsuario));

Considerações:

1) Lembre-se que as sessões expiram por inatividade, sendo assim, utilize o Global.Asax para direcionar o usuário para a pagina de login quando a sessão expirar.

2) Sessions nada mais são que arquivos gerados no lado CLIENTE com a informação desserializada.

3) Nunca guarde informações importantes como senhas e dados protegidos em Sessions. Por ser um arquivo cliente esta inforação pode ser vista por programas maliciosos.

4) Alguns computadores proibem o cliente de gerar estes arquivos, impedindo seu site de criar sessões. Garanta que seus usuários permitem o uso de Cookies em seus computadores.

 

Espero te-los ajudado. ;)

 

Abraços,

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Masters,

 

Pelo jeito este assunto sobre classes em Session pode gerar algumas duvidas.

 

Vou postar aqui, um pequeno exemplo onde utilizamos uma classe dentro de uma Session e ainda utilizamos uma Classe Estatica para recuperar os valores da Sessão.

 

Vamos iniciar criando a nossa classe que ficará na session:

 

// Classe para guardar os dados do usuário
// Lembre-se: Somente classes serializaveis podem ser colocadas em Sessão
[Serializable]
public class DadosUsuario
{
  public int IdUsuario { get; set; }
  public string NmUsuario { get; set; }
  public string emailUsuario { get; set; }
}

Agora, em nossa classe Helper vamos criar uma propriedade de lê e as informações da Session de maneira simples:

 

    public static class MyHelper
    {
        static DadosUsuario Usuario
        {
            get
            {
                if (HttpContext.Current.Session["Usuario"] is DadosUsuario)
                    return HttpContext.Current.Session["Usuario"] as DadosUsuario;
                else
                    return null;
            }
            set
            {
                if (value is DadosUsuario) 
                    HttpContext.Current.Session["Usuario"] = value; 
                else 
                    throw new Exception("Este objeto não é uma classe DadosUsuario");
            }
        }
    }

Para usar a classe Helper:

MyHelper.Usuario = new DadosUsuario();
MyHelper.Usuario.IdUsuario = 1;
MyHelper.Usuario.NmUsuario = "Angelo Compri";

//Recuperando os dados em qualquer outra página de seu site.
Response.Write(String.Format("Ola {0}, seja bem vindo!", MyHelper.Usuario.NmUsuario));

Considerações:

1) Lembre-se que as sessões expiram por inatividade, sendo assim, utilize o Global.Asax para direcionar o usuário para a pagina de login quando a sessão expirar.

2) Sessions nada mais são que arquivos gerados no lado CLIENTE com a informação desserializada.

3) Nunca guarde informações importantes como senhas e dados protegidos em Sessions. Por ser um arquivo cliente esta inforação pode ser vista por programas maliciosos.

4) Alguns computadores proibem o cliente de gerar estes arquivos, impedindo seu site de criar sessões. Garanta que seus usuários permitem o uso de Cookies em seus computadores.

 

Espero te-los ajudado. ;)

 

Abraços,

Angelo Compri

 

Lá vem eu de novo! rss

 

Andei lendo um pouco sobre classe para tentar entender o seu exemplo, mas vou te dizer que não consegui adaptar no meu projeto.

Se entendi bem umm Session seria como uma variavel que guarda valores por uma sessão inteira, de modo que poderia guardar valores para serem usados em outras paginas, correto?

 

Pergunta, onde eu descrevo as classes DadosUsuários e MyHelper? Eu add no projeto um objeto Class para cada uma das classe do seu exemplo?

 

Ultima pergunta a linguagem do exemplo é vb igual a do meu projeto ou c?

 

Obrigado e desculpe pelo seu tempo...

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Master,

 

1) Na realidade a Session é muito mais que uma variavel, mas sem problemas, vamos começar pelo básico.

2) As classes DadosUsuários e MyHelper deverão estar em seus respectivos arquivos de classe.

3) O exemplo enviado é em C# e não eu não tenho este exemplo em VB, não programo em vb.

 

Sobre meu tempo.. não se preocupe.. rsss depoi eu passo o numero de minha conta.. qualquer contribuição é bem vinda.. ;)

 

Espero te-lo ajudado. ;)

 

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Master,

 

1) Na realidade a Session é muito mais que uma variavel, mas sem problemas, vamos começar pelo básico.

2) As classes DadosUsuários e MyHelper deverão estar em seus respectivos arquivos de classe.

3) O exemplo enviado é em C# e não eu não tenho este exemplo em VB, não programo em vb.

 

Sobre meu tempo.. não se preocupe.. rsss depoi eu passo o numero de minha conta.. qualquer contribuição é bem vinda.. ;)

 

Espero te-lo ajudado. ;)

 

Angelo Compri

 

Pois é tempo é dinheiro! rssss

Vou tentar adaptar no meu projeto em vb... Vamos ver se consigo!

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.