Tela de login não barra usuarios não autenticados.

06/10/2009

Olá,   Tenho uma tela de login, mas, quando eu digito o endereço da pagina que deveria ser exibida somente aos usuarios autenticados, ela aparece, ao inves de continuar na tela de login.   Eu já configurei o web.config mas não sei o que está fazendo isso.   Segue meu código do web.config:  
   
João Teixeira

João Teixeira

Curtidas 0

Respostas

João Teixeira

João Teixeira

06/10/2009

Segue o codigo:   <connectionStrings>
    <add name="nomeConnectionString" connectionString="Server=endereco.com.br;User id=useradmin;Password=123456;Persist Security Info=True;Database=dbteste;Allow User Variables=True"
      providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <location path="logo.gif">
 <appSettings/>
  <system.web>
      <authentication mode="Forms">
        <forms name=".SecureWeb" loginUrl="login.aspx"/>
      </authentication>
      <authorization>
        <deny users="?"/>
      </authorization>
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Olá João não existe mas nenhum allow user no seu Web.Config? Por exemplo abaixo a página Texte.aspx está liberada   <location path="Teste.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>     E o que você fez está correto.      <authorization>
   <deny users="?"/>
  </authorization>     Negando acesso para todos que não estão logado.   Posta o seu Web.Config completo.   Fabio
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

<?xml version="1.0"?>
<!--
    Note: As an alternative to hand editing this file you can use the
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in
    machine.config.comments usually located in
    \Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration>
 <configSections>
  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
     <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
     <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
     <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
     <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    </sectionGroup>
   </sectionGroup>
  </sectionGroup>
 </configSections>
 <appSettings/>
 <connectionStrings>
  <add name="antectreinamentoConnectionString" connectionString="server=127.0.0.1;user id=root;database=antectreinamento;Allow User Variables=True" providerName="MySql.Data.MySqlClient"/>
  <add name="antectreinamentoConnectionString2" connectionString="server=127.0.0.1;user id=root;database=antectreinamento" providerName="MySql.Data.MySqlClient"/>
 </connectionStrings>
 <location path="logo.gif">
  <system.web>
   <!--
            Set compilation debug="true" to insert debugging
            symbols into the compiled page. Because this
            affects performance, set this value to true only
            during development.
        -->
   <compilation debug="false">
    <assemblies>
     <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
     <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
     <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
     <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
     <add assembly="MySql.Data, Version=6.1.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/>
    </assemblies>
   </compilation>
   <!--
            The <authentication> section enables configuration
            of the security authentication mode used by
            ASP.NET to identify an incoming user.
        -->
   <customErrors mode="Off"/>
   <authentication mode="Forms">
    <forms name="SecureWeb" loginUrl="login.aspx"/>
   </authentication>
   <authorization>
    <deny users="?"/>
   </authorization>
   <!--
            The <customErrors> section enables configuration
            of what to do if/when an unhandled error occurs
            during the execution of a request. Specifically,
            it enables developers to configure html error pages
            to be displayed in place of a error stack trace.         <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
   <pages>
    <controls>
     <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
     <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </controls>
   </pages>
   <httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
   </httpHandlers>
   <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   </httpModules>
  </system.web>
 </location>
 <system.codedom>
  <compilers>
   <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/>
   </compiler>
   <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="OptionInfer" value="true"/>
    <providerOption name="WarnAsError" value="false"/>
   </compiler>
  </compilers>
 </system.codedom>
 <!--
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
 <system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
   <remove name="ScriptModule"/>
   <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </modules>
  <handlers>
   <remove name="WebServiceHandlerFactory-Integrated"/>
   <remove name="ScriptHandlerFactory"/>
   <remove name="ScriptHandlerFactoryAppServices"/>
   <remove name="ScriptResource"/>
   <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </handlers>
 </system.webServer>
 <runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   </dependentAssembly>
   <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
   </dependentAssembly>
  </assemblyBinding>
 </runtime>
 <system.web>
  <compilation>
   <assemblies>
    <add assembly="MySql.Data, Version=6.1.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D"/></assemblies></compilation></system.web></configuration>
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Parece que está OK, e esta página está em alguma pasta? Nesta pasta não tem nenhum web.config?
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Estranho, porque o web.config, a tela de login e a default estão no mesmo nivel, dentro da pasta do projeto estão no "raiz".      
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Percebi uma coisa:   Se eu tiro as tags:     <location Path="login.gif">   A restrição funciona.   Mas não aparece a imagem na tela...   em qual parte do código eu coloco o location path para exibir a imagem e onde coloco o fechamento da tag?        
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Se não tiver nenhum problema para você, tem como mandar o projeto para fgamans@gmail.com ?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Faz o seguinte crie uma pasta chamada images e coloque suas imagens dentro, e libere utiiza a configuração abaixo.  
  <location path="Images">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>   Com esta restrição todo o seu site vai continuar bloqueado exceto a pasta Images.   Fabio
   
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

o problema é que o projeto é de um cliente e o banco é acessado diretamente pelo host deles... existem configurações com dados da empresa deles...   na verdade o codigo agora estaria funcionando se o location não estivesse no lugar errado, só preciso saber onde coloca-lo e onde fecha-lo para que não interfira na autenticação...    
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Perfeito não precisa mandar, acho que descobrimos, faça o que disse no post anterior, vai dar certo. Crie a pasta images e libere a restrição.   Fabio
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Agora sim...   Coloquei este trecho do código antes do meu <systemweb> e funcionou.   Eu não sabia que se poderia utilizar mais de uma tag <systemweb>.   Outra coisa...   A minha autenticação está no evento click do botão onde eu coloco algo do tipo:   se o usuario e senha for igual a zezinho e senhateste, OU se for igual a mariazinha e teste2, então vá para a pagina default.aspx.   Ok, isto está funcionando.   O problema é que eu preciso fazer esta comparação buscando os dados da tabela de usuario e senha.   Eu até consigo fazer um sqldatasource com as informações, mas como eu uso isso no evento click?   Obrigado.
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Então deixa eu te passar um curso completo sobre este assunto, aconselho você assistir todas as aulas, é bem interessante, fala tudo sobre autenticação, permissões acredito que você vai gostar.   Video: Curso Online-Forms Authentication e Roles-Aula I-Apresentando o objetivo do projeto   https://www.devmedia.com.br/articles/viewcomp.asp?comp=11713   As demais aulas você encontra no final da página.     Depois que você assistir me da um retorno do que achou.     Fabio
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

ok vou dar uma olhada. 
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Olá,   Eu não pude assistir todos os videos pois estou no trabalho. Mas eu tive alguns avanços, e preciso de uns "retoques".   eu criei um dataset com um tableadapter com a seguinte sql:   SELECT     usuario_id, usuario_nome, usuario_senha
FROM         usuarios
WHERE     (usuario_nome = @nome) AND (usuario_senha = @senha)   (Eu testo esta query colocando um usuario no @nome e uma senha no @senha, e como preview aparece a linha deste usuario com o id, nome e senha. Entendo que a query está correta.)   Depois eu criei um objectdatasource no webform de login associando os parametros @nome e @senha aos textbox do formulario.   Aí criei um botao "entrar" para fazer a comparação.   No evento click eu coloquei dessa forma: mas está dando errado, eu coloco o nome e senha e continua na mesma pagina. O comando está errado? como eu ajusto ele?   public partial class login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {     }
    protected void CmdLogin_Click(object sender, EventArgs e)
    {       
        if (txtLogin.Text == this.ObjectDataSource1.Select() && txtSenha.Text == this.ObjectDataSource1.Select())
        {
            FormsAuthentication.RedirectFromLoginPage(txtLogin.Text, chkLembrar.Checked);
        }
    }
}
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Degugando qual o conteúdo de this.ObjectDataSource1.Select() ? Por que não retorna um objeto sem utilizar o ObjectDataSource?

txtLogin.Text == this.ObjectDataSource1.Select() && txtSenha.Text == this.ObjectDataSource1.Select()
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Oi,   O conteúdo do objectdatasource1.select() é o resultado da sql:   SELECT     usuario_id, usuario_nome, usuario_senha
FROM         usuarios
WHERE     (usuario_nome = @nome) AND (usuario_senha = @senha)   ... eu não entendi o que vc sugeriu usar ao invés do objectdatasource.... retornar um objeto? como eu faria isso?   não entendi.    
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

O que deve estar acontecendo é que

txtLogin.Text == this.ObjectDataSource1.Select()  - Não é igual, qual o contepudo de Select()??
&& txtSenha.Text == this.ObjectDataSource1.Select() - Não é igual

Não sendo igual nenhum dos dois não está autenticando.


GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Pois é, eu vi no debug que o valor de objectdata é "GetData" e o valor do txtLogin é o nome do usuario...   Como eu comparo isso da maneira correta? aff... tá difícil, sinto que é alguma coisa ridícula que eu simplesmente não sei. está muito perto...   só preciso acessar a tabela e comparar(nao a tabela, mas sua instancia...)   como faço aquilo que voce sugeriu?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

O que você está utilizando para fazer o select? Um datareader ou um datatable?
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Estou utilizando um DataTable, e nele foi criado um tableadapter.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Eu acho que não posso comparar o tipo texto do textbox com o tipo Ienumerable, certo?   Eu posso fazer um cast, levando em conta que só obtenho um registro da query?   Como se faz um cast?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

E porque nao compara com o DataTable ?   exemplo dt.Rows[0]["usuario"].ToString();    
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Fiz assim, mas acho que a sintaxe continua errada... o DataRow fica marcado de vermelho dizendo que datarow é um tipo mas está sendo usado como uma variável...     public partial class login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {     }
    protected void CmdLogin_Click(object sender, EventArgs e)
    {       
        if (txtLogin.Text == DataRow[0]["usuario_nome"].ToString() &&             txtSenha.Text == DataRow[0]["usuario_senha"].ToString())         {
            FormsAuthentication.RedirectFromLoginPage(txtLogin.Text, chkLembrar.Checked);
        }
    }
}
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Veja um exemplo com DataTable e outro com DataSet     DATATABLE   dt é o meu datatable  ou seja me retorna do datatable, linha 0 coluna mercadoria e guarde no textbox   txtMercadoria.Text = dt.Rows[0]["MERCADORIA"].ToString();     =================================================== Exemplo com DataSet que é uma coleção de DataTable   DATASET DataSet ds = CandidatoDadosDAL.retornaDadosbyUser(id);         if (ds.Tables[0].Rows.Count != 0)
        {
            txtNome.Text = ds.Tables["dados"].Rows[0][0].ToString();
            DateTime Nasc = Convert.ToDateTime(ds.Tables["dados"].Rows[0][1].ToString());
            txtNascimento.Text = Nasc.ToString("dd/MM/yyyy");
            txtNacionalidade.Text = ds.Tables["dados"].Rows[0][2].ToString();
            drpEstadoCivil.SelectedValue = ds.Tables["dados"].Rows[0][3].ToString();
}  
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Eu coloquei assim: Mas ele marca de vermelho o usuarios (que é um datatable do dataset1) e diz que não faz parte do contexto atual. Tenho que adicionar mais alum assembly? eu estou usando estes aqui: using System;
using System.Collections.Generic;
using System.Web;
using System.Security.Authentication;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Data;
using System.Collections;         protected void CmdLogin_Click(object sender, EventArgs e)
    {         string nome = usuarios.Row[0]["usuario_nome"].ToString();
        string senha = usuarios.Row[0]["usuario_senha"].ToString();
       
        if (txtLogin.Text == nome && txtSenha.Text == senha)
        {
            FormsAuthentication.RedirectFromLoginPage(txtLogin.Text, chkLembrar.Checked);
        }      }
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Onde está o seu método que retorna um DataTable? Posta ele.

GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Uhm... eu não tenho um método que retorna um datatable... o datatable está dentro do dataset1, eu arrastei a tabela pra dentro dele e ele está lá. onde eu tenho que criar um metodo para retornar este datatable?  
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Explica tudo que você utilizou neste projeto, preciso dos detalhes para te ajudar, eu achei que você tinha codificado um método dataset    
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

eu tenho um banco de dados mysql, então eu adicionei um novo item no projeto, um dataset.   Neste dataset eu arrastei as tabelas que eu iria usar, então, automaticamente os datatable com os tableadapters foram criados.   na tela de login tenho dois textbox para login e senha e um botao para fazer o teste no evento click.   criei um object datasource apontando para o testelogin tableadapter e fiz referencia dos parametros @nome com o textbox nome e o parametro @senha com o textbox senha.   o sql do table adapter é:   SELECT      usuario_id, usuario_nome, usuario_senha
FROM         usuarios
WHERE     (usuario_nome = @nome) AND (usuario_senha = @senha)   Assim, os valores que forem digitados nos textboxs, serao comparados com os do datatable.   se essa comparação for verdadeira, ele entra no formulario, senao, continua na tela de login.   É o que estou tentando fazer.
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

João vou sugerir você criar um código que retorne um DataTable fazendo o select dos seus usuários no banco, após este select compare o usuário e senha


GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

João vou sugerir você criar um código que retorne um DataTable fazendo o select dos seus usuários no banco, após este select compare o usuário e senha


GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Putz... eu não sei fazer um código para criar um datatable com select...   eu preciso fazer esta busca:   SELECT      usuario_id, usuario_nome, usuario_senha
FROM         usuarios
WHERE     (usuario_nome = @nome) AND (usuario_senha = @senha)   Na verdade eu só preciso comparar o texto digitado para login e senha com o usuario_nome e usuario_senha... só isso... e eu não consigo fazer isso... se a query estiver errada, pode corrigir... não quero nada rebuscado, apenas compara o que o usuario digitou com o que está no banco de dados usuarios...   como eu faço este código para gerar a datatable?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Olá João o ideal é você estudar ADO.NET primeiro, um outro detelhe é que seu banco é MySQL vai precisar de um driver para isso e os comandos são diferentes, estude primeiro pelo SQL Server.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Pois é... o problema é este... eu não tenho tempo para estudar ADO, eu tinha que entregar isso sexta-feira passada, e não consigo sair disso... 
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Veja um exemplo


  public DataSet ObterUsuario(string nome, string senha)
    {
        DataSet ds = new DataSet("eventos");
        using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnnString"].ConnectionString))
        {
            string sql = "SELECT usuario_id, usuario_nome, usuario_senha FROM usuarios WHERE     (usuario_nome = @nome) AND (usuario_senha = @senha)";
            using (SqlCommand cmd = new SqlCommand(sql, cn))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@nome", nome);
                cmd.Parameters.AddWithValue("senha", senha);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
            }
        }
        return ds;
    }



GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Fabio,   Obrigado pela atenção e paciencia...  vou tentar fazer algo emcima deste exemplo. Este tipo de codigo eu faço criando uma nova classe, ou coloco no page load da página do login?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Você pode criar uma classe, este código chamamos de método. Um método que retorna um DataTable.

Fabio
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Posso fechar este chamado?
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Eu assisti seus videos sobre autenticação. Aguarde mais um tempo, que vou tentar implementá-lo no meu programa, se eu tiver qualquer problema, te aviso. Ou, se eu conseguir, aviso também para fechar o chamado.
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Combinado, estou aguardando.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Bem... vamos lá.   Eu criei em appcode duas classes, a User para instanciar a tabela de usuarios, e a DBOOperations para fazer as operações com o banco de dados. Configurei o web.config conforme os videos, alterei a connectionstring para o meu banco de dados com os comandos para mysql. depois vizualizei no browser a pagina de login, que foi carregada normalmente. Mas quando eu coloquei o usuario e senha, e cliquei no botão, apareceu este erro de acesso a uma tabela que nem existe no meu banco: Eu entendi que o usuário não consegue acesso ao banco, é isso mesmo, ou eu entendi o erro de forma equivocada? se for... eu acesso o banco normalmente atravez de datasets e datasources. O que pode ser isto?   Obrigado.     Erro de Servidor no Aplicativo '/antectreinamento'. SELECT command denied to user 'antectreinamento'@'201.51.121.39' for table 'proc' Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: MySql.Data.MySqlClient.MySqlException: SELECT command denied to user 'antectreinamento'@'201.51.121.39' for table 'proc'

Erro de Origem:

Linha 21: com.Parameters.AddWithValue("@UserID", DbType.String).Value = UserID; Linha 22: conect.Open(); Linha 23: MySqlDataReader dr = com.ExecuteReader(); Linha 24: User _user = null; Linha 25: while (dr.Read())
Arquivo de Origem: c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\App_Code\DBOOperations.cs    Linha: 23

Rastreamento de Pilha:

[MySqlException (0x80004005): SELECT command denied to user 'antectreinamento'@'201.51.121.39' for table 'proc'] MySql.Data.MySqlClient.MySqlStream.ReadPacket() +216 MySql.Data.MySqlClient.NativeDriver.ReadResult() +91 MySql.Data.MySqlClient.ResultSet.NextResult() +427 MySql.Data.MySqlClient.MySqlDataReader.NextResult() +400 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +998 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() +6 MySql.Data.MySqlClient.SchemaProvider.GetProcedures(String[] restrictions) +1934 MySql.Data.MySqlClient.ISSchemaProvider.GetProcedures(String[] restrictions) +38 MySql.Data.MySqlClient.ISSchemaProvider.GetSchemaInternal(String collection, String[] restrictions) +165 MySql.Data.MySqlClient.SchemaProvider.GetSchema(String collection, String[] restrictions) +83 MySql.Data.MySqlClient.MySqlConnection.GetSchema(String collectionName, String[] restrictionValues) +55 MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection connection, String spName) +202 MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection connection, String spName) +44 MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection conn, String spName) +186 MySql.Data.MySqlClient.StoredProcedure.GetParameters(String procName) +77 MySql.Data.MySqlClient.StoredProcedure.Resolve(Boolean preparing) +191 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +549 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() +6 DBOOperations.CheckUser(String UserID) in c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\App_Code\DBOOperations.cs:23 login.CmdLogin_Click(Object sender, EventArgs e) in c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\login.aspx.cs:21 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
Informações sobre a Versão: Microsoft .NET Framework Versão:2.0.50727.3082; Versão do ASP.NET:2.0.50727.3082
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Isso, mas você configurou o driver do MySQL na sua aplicação?
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Configurei sim, instalei o mysql connector, adicionei a referencia aos arquivos dll, e incluí as assemblies no código. Qundo utilizo os comandos mysql, eles não ficam marcados em vermelho não, eles são aceitos. Este erro dava quando eu tentava acessar o banco de dados que esta no servidor da internet, no banco local dá outro erro dizendo que não acha o "checkuser"...
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Eu não havia criado a stored procedure. Eu tentei criar pelo visual studio no server explorer com o codigo abaixo, mas dá erro de sintaxe. A sintaxe do mysql é muito diferente do SqlServer?   CREATE PROCEDURE CheckUser
(
 @UserID VARCHAR(50)
)
BEGIN AS
SELECT usuario_senha
FROM usuarios
WHERE usuario_nome = @UserID END
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Um pouco, dependendo da versão do MySQL não tem Procedure.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

minha versao é a 6.1.2.0   voce sabe como alterar o codigo?
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Ao invés da proc utilize a instrução SQL e altere o commandtype para text CommandType.Text
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Mudei para text, e continua dando erro da mesma linha. Eu só nao entendi a parte de mudar o 'proc' para sql. era só mudar o commandtype para text, ou tem algo a mais para fazer? eu não achei este 'proc' em lugar nenhum... MySqlDataReader dr = com.ExecuteReader(); Erro de Servidor no Aplicativo '/antectreinamento'. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CheckUser' at line 1 Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CheckUser' at line 1

Erro de Origem:

Linha 21: com.Parameters.AddWithValue("UserID", DbType.String).Value = Userid; Linha 22: conect.Open(); Linha 23: MySqlDataReader dr = com.ExecuteReader(); Linha 24: User _user = null; Linha 25: while (dr.Read())
Arquivo de Origem: c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\App_Code\DBOOperations.cs    Linha: 23

Rastreamento de Pilha:

[MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CheckUser' at line 1] MySql.Data.MySqlClient.MySqlStream.ReadPacket() +216 MySql.Data.MySqlClient.NativeDriver.ReadResult() +91 MySql.Data.MySqlClient.ResultSet.NextResult() +427 MySql.Data.MySqlClient.MySqlDataReader.NextResult() +400 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +998 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() +6 DBOOperations.CheckUser(String Userid) in c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\App_Code\DBOOperations.cs:23 login.CmdLogin_Click(Object sender, EventArgs e) in c:\Documents and Settings\joão luiz\Meus documentos\Visual Studio 2008\Projects\antectreinamento\login.aspx.cs:21 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
Informações sobre a Versão: Microsoft .NET Framework Versão:2.0.50727.3082; Versão do ASP.NET:2.0.50727.3082
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

Você tem que fazero o select ao invés da Proc.   Select * from usuario where usuario = "" and senha = ""   Veja como funciona parâmetros no MySQL eu não sei dizer.   Fabio  
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Então eu nãoutilizarei a stored procedure, certo? vou fazer esta seleção atraves de um select, conforme seu exemplo, é isso? agora... este select eu faço a partir de onde? do evento click? do DBOOperations? do meu dataset? 
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

No´próprio método que você criou.
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Não utilizei o stored procedure, utilizei no metodo e deu certo. Muito obrigado.       public User CheckUser(string Userid)
    {
        using (MySqlConnection conect = new MySqlConnection(ConfigurationManager.ConnectionStrings["antectreinamentoConnectionString"].ConnectionString))
        {
            using (MySqlCommand com = new MySqlCommand("SELECT usuario_senha FROM usuarios WHERE usuario_nome = '" + Userid + "'", conect))
            {
                com.CommandType = CommandType.Text;
                conect.Open();
                MySqlDataReader dr = com.ExecuteReader();
                User _user = null;
                if (dr.HasRows)
                {
                    if (dr.Read())
                    _user = new User();
                    _user.Senha = dr.GetString("usuario_senha");
                }                 return _user;               }
        }
    }
GOSTEI 0
Fabio Mans

Fabio Mans

06/10/2009

João posso fechar este chamado?
GOSTEI 0
João Teixeira

João Teixeira

06/10/2009

Sim. Pode fechar o chamado.
GOSTEI 0
POSTAR