Inquiridor
Minha pagina.aspx de Login esta aceitando qualquer senha.

Pergunta
-
Boa Tarde
Minha pagina de Login.aspx esta aceitando qualquer senha.
Não esta mais vinculando com o banco de dados.
Sendo que estava antes totalmente bloqueado e com segurança.
O que esta errado ?
Segue meu codigo:
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Entity.Migrations.Model;
using ControledeUsuarios;
namespace ControledeUsuarios.Account
{
public partial class Login : Page
{
private ModelDataContext mdc;
protected void Page_Load(object sender, EventArgs e)
{
//RegisterHyperLink.NavigateUrl = "Register";
OpenAuthLogin.ReturnUrl = Request.QueryString["ReturnUrl"];
var returnUrl = HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
if (!String.IsNullOrEmpty(returnUrl))
{
//RegisterHyperLink.NavigateUrl += "?ReturnUrl=" + returnUrl;
}
}
protected void Unnamed6_Click(object sender, EventArgs e)
{
mdc = new ModelDataContext();
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
//HttpCookie cookieUsuario = new HttpCookie(CADUSUARIOS.USUARIO.ToString());
//Session["SessionCliente"] = "";
//Session["SessionClientes"] = CADUSUARIOS.CLIENTE.ToString();
//Session["SessionVendedor"] = CADUSUARIOS.VENDEDOR.ToString();
//Session["SessionProduto"] = CADUSUARIOS.PRODUTO.ToString();
//Session["SessionCategoria"] = CADUSUARIOS.CATEGORIA.ToString();
//Session["SessionRevista"] = CADUSUARIOS.REVISTA.ToString();
//Session["SessionMailing"] = CADUSUARIOS.MAILING.ToString();
//Session["SessionUsuarios"] = CADUSUARIOS.USUARIO.ToString();
//Usando Cookie
HttpCookie CookieCodCliente = new HttpCookie("CodCliente", "".ToString());
Response.SetCookie(CookieCodCliente);
HttpCookie CookieCliente = new HttpCookie("SessionCliente", "".ToString());
Response.SetCookie(CookieCliente);
HttpCookie CookieClientes = new HttpCookie("SessionClientes",CADUSUARIOS.CLIENTE.ToString());
Response.SetCookie(CookieClientes);
HttpCookie CookieVendedor = new HttpCookie("SessionVendedor", CADUSUARIOS.VENDEDOR.ToString());
Response.SetCookie(CookieVendedor);
HttpCookie CookieProduto = new HttpCookie("SessionProduto", CADUSUARIOS.PRODUTO.ToString());
Response.SetCookie(CookieProduto);
HttpCookie CookieCategoria = new HttpCookie("SessionCategoria", CADUSUARIOS.CATEGORIA.ToString());
Response.SetCookie(CookieCategoria);
HttpCookie CookieRevista = new HttpCookie("SessionRevista", CADUSUARIOS.REVISTA.ToString());
Response.SetCookie(CookieRevista);
HttpCookie CookieMailing = new HttpCookie("SessionMailing", CADUSUARIOS.MAILING.ToString());
Response.SetCookie(CookieMailing);
HttpCookie CookieUsuarios = new HttpCookie("SessionUsuarios", CADUSUARIOS.VENDEDOR.ToString());
Response.SetCookie(CookieUsuarios);
HttpCookie CookieUsuario = new HttpCookie("SessionUsuario", a.ToString());
Response.SetCookie(CookieUsuario);
HttpCookie CookieIVC = new HttpCookie("SessionIVC", CADUSUARIOS.IVC.ToString());
Response.SetCookie(CookieIVC);
if (CADUSUARIOS.CLIENTE.Trim() == "LEITURA" || CADUSUARIOS.CLIENTE == "ESCRITA")
{
Response.Redirect("~/Clientes.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.MAILING == "LEITURA" || CADUSUARIOS.MAILING == "ESCRITA")
{
Response.Redirect("~/Mailing.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.PRODUTO == "LEITURA" || CADUSUARIOS.PRODUTO == "ESCRITA")
{
Response.Redirect("~/Produto.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.VENDEDOR == "LEITURA" || CADUSUARIOS.VENDEDOR == "ESCRITA")
{
Response.Redirect("~/Vendedores.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.CATEGORIA == "LEITURA" || CADUSUARIOS.CATEGORIA == "ESCRITA")
{
Response.Redirect("~/Categorias.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.REVISTA == "LEITURA" || CADUSUARIOS.REVISTA == "ESCRITA")
{
Response.Redirect("~/Revistas.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.USUARIO == "LEITURA" || CADUSUARIOS.USUARIO == "ESCRITA")
{
Response.Redirect("~/Usuarios.aspx?" + "Usuario=" + a);
}
}
}
}
}
}
Todas as Respostas
-
Olá,
O que você está usando para autenticação no WebForms? Membership, Identity ou algo feito por você?
Nesse código não tem nada que esteja validando senha.
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Ola
Estou usando o MemberShip do Visual Studio 2012. O qual estava funcionando. Mas agora parou.
Segue meu codigo Login.aspx
<%@ Page Title="Entrar" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs"
Inherits="ControledeUsuarios.Account.Login" %>
<%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<hgroup class="title">
<%--<h1><%: Title %>.</h1>--%>
</hgroup>
<section id="loginForm">
<h2>Use sua conta para logar</h2>
<asp:Login runat="server" ViewStateMode="Disabled" RenderOuterTable="false" ID="LoginUser">
<LayoutTemplate>
<p class="validation-summary-errors">
<asp:Literal runat="server" ID="FailureText" />
</p>
<fieldset>
<legend>Formulário de Login</legend>
<ol>
<li>
<asp:Label runat="server" AssociatedControlID="UserName">nome de usuário</asp:Label>
<asp:TextBox runat="server" ID="UserName" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="O campo do nome do usuário é necessário." />
</li>
<li>
<asp:Label runat="server" AssociatedControlID="Password">senha</asp:Label>
<asp:TextBox runat="server" ID="Password" TextMode="Password" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="O campo de senha é necessário." />
</li>
<li>
<asp:CheckBox runat="server" ID="RememberMe" />
<asp:Label runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Mantenha-me conectado</asp:Label>
</li>
</ol>
<asp:Button runat="server" CommandName="Login" Text="Entrar" OnClick="Unnamed6_Click" />
</fieldset>
</LayoutTemplate>
</asp:Login>
<p>
<%-- <asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Registre</asp:HyperLink>
Se você não tiver uma conta--%>
</p>
</section>
<section id="socialLoginForm">
<uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />
</section>
</asp:Content>
-
Ricardo, você fez alguma alteração no código recentemente?
Como dica, tente deixar a propriedade ViewStateMode="Enabled" no formulário de Login.
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
-
<asp:Login runat="server" ViewStateMode="Enabled" RenderOuterTable="false" ID="LoginUser">
<LayoutTemplate>
<p class="validation-summary-errors">
<asp:Literal runat="server" ID="FailureText" />
</p>
<fieldset>
<legend>Formulário de Login</legend>
<ol>
<li>
<asp:Label runat="server" AssociatedControlID="UserName">nome de usuário</asp:Label>
<asp:TextBox runat="server" ID="UserName" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="O campo do nome do usuário é necessário." />
</li>
<li>
<asp:Label runat="server" AssociatedControlID="Password">senha</asp:Label>
<asp:TextBox runat="server" ID="Password" TextMode="Password" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="O campo de senha é necessário." />
</li>
<li>
<asp:CheckBox runat="server" ID="RememberMe" />
<asp:Label runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Mantenha-me conectado</asp:Label>
</li>
</ol>
<asp:Button runat="server" CommandName="Login" Text="Entrar" OnClick="Unnamed6_Click" />
</fieldset>
</LayoutTemplate>
</asp:Login> -
Seu Web.Config está configurado tudo corretamente? Não faz sentido se você não fez nada e parou de funcionar. Não foi alterado nada? Nem no banco de dados, nem na aplicação? Visual Studio?
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
Aqui não faltou a comparação com senha também?
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a && use.UserSenha == senha);
- Editado RafaelTeixeira quinta-feira, 24 de novembro de 2016 13:29
-
-
Tentou Login.Password?
Embora esteja verificando dessa forma a autenticação, mas o membership faz isso de forma automática para você, não entendi essa implementação que fez.
Para ver como é a implementação padrão, basta criar um novo projeto e selecionar esse tipo de autenticação
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Boa Tarde Pessoal
Coloquei dessa forma:
Porem esta dando erro.
Erro de Servidor no Aplicativo '/'.
A sequência não contém elementos
Descrição: Ocorreu uma exceção sem tratamento 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: System.InvalidOperationException: A sequência não contém elementos
Erro de Origem:Linha 45: { Linha 46: Linha 47: USERS USERS = mdc.USERS.First(CAD => CAD.LOGIN == a && CAD.SENHA == b); Linha 48: Linha 49: if (USERS.LOGIN != "")
Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs Linha: 47
Rastreamento de Pilha:[InvalidOperationException: A sequência não contém elementos] System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1157 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +342 System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute(Expression expression) +58 System.Linq.Queryable.First(IQueryable`1 source, Expression`1 predicate) +249 ControledeUsuarios.Account.Login.Unnamed6_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs:47 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9712662 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1586.0 -
André
O código ficou assim:
mdc = new ModelDataContext();
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
string b = LoginUser.Password;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
USERS USERS = mdc.USERS.First(CAD => CAD.LOGIN == a && CAD.SENHA == b);
if (USERS.LOGIN != "")
{
//BREAK
}
-
A string b conseguiu pegar os valor do Password? Debugue para ter certeza.
Caso não tenha pego, tente dessa forma:
string b = (LoginUser.FindControl("Password") as TextBox).Text;
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Boa Tarde
A tabela estava errada. Agora coloquei a certa.
Porem esta dando outro erro no codigo.
mdc = new ModelDataContext();
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
string b = (LoginUser.FindControl("Password") as TextBox).Text;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
string c = CADUSUARIOS.UserId.ToString();
Membership Membership = mdc.Memberships.First(me => me.UserId == c && me.Password == b);
if (c != "")
{
//BREAK
}ERRO:
Error 2 Operator '==' cannot be applied to operands of type 'System.Guid' and 'string' C:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs 49 73 ControledeUsuarios
CAMPO USERID = uniqueidentifier
CAMPO PASSWORD = nvarchar(128)
Podem me ajudar por favor.
Obrigado
-
Você tem que fazer um Parse correto na sua variável c, faz assim:
Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString());
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Dessa forma que você colocou André não da mais erro
Porem eu não sei como verificar se tem ou não registro ?
olhe meu codigo
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
string b = (LoginUser.FindControl("Password") as TextBox).Text;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString());
Membership Membership = mdc.Memberships.First(me => me.UserId == c && me.Password == b);
if (//Mas como eu verifico se tem registro ?)
{
//BREAK
} -
Ricardo, a classe Membership do código é do namespace System.Web.Security? Porque acredito que não seja possível instânciar já que ela é static. Pode testar se existe usuário assim:
//O objeto tem que começar com letra minúscula aqui if(Membership.GetUser() != null) { //Faz algo }
O GetUser retorna o usuário logado.
Rodrigo Reis Ferreira
Microsoft Certified -
Bom dia Rodrigo
Nesse meu cado o MemberShip é uma tabela.
Então eu tenho que verificar de acordo com minha condição se existe registro ou não.
Se não existir mostrar uma mensagem que usuario não existe e da um break na aplicação.
Aguardo seu retorno.
Obrigado.
-
-
ola tudo bem , o seu codigo esta aceitando qualquer dado .... voce nao esta fazendo nenhuma verificacao quando alguem clica no botao ...
ideal começar olhando pelo botao do clique e ver se os campos estao com valor ... depoiss vc verifica .
a parte do "verifica" nao acontece no seu codigo
abraços
-
-
Acho que entendi o que você quer, tenta assim:
bool existe = mdc.Memberships.Any(me => me.UserId == c && me.Password == b); //ou Membership membership = mdc.Memberships.First(me => me.UserId == c && me.Password == b); if(membership != null) { }
Rodrigo Reis Ferreira
Microsoft Certified- Marcado como Resposta Robson William SilvaModerator segunda-feira, 28 de novembro de 2016 11:08
- Não Marcado como Resposta Ricardo-ti2016 segunda-feira, 28 de novembro de 2016 12:07
-
Bom dia
Não deu certo Rodrigo
Erro de Servidor no Aplicativo '/'.
A sequência não contém elementos
Descrição: Ocorreu uma exceção sem tratamento 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: System.InvalidOperationException: A sequência não contém elementos
Erro de Origem:Linha 48: Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString()); Linha 49: Linha 50: Membership Membership = mdc.Memberships.First(me => me.UserId == c && me.Password == b); Linha 51: Linha 52: if (Membership != null)
Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs Linha: 50
Rastreamento de Pilha:[InvalidOperationException: A sequência não contém elementos] System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1157 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +342 System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute(Expression expression) +58 System.Linq.Queryable.First(IQueryable`1 source, Expression`1 predicate) +249 ControledeUsuarios.Account.Login.Unnamed6_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs:50 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9712662 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1586.0 -
Ola Ricardo, pelo erro me parece que a lista de Memberships esta vazia, antes da linha 50 faz um teste:
if(mdc.Memberships.Count > 0) { }
Mas veja que isso também é um problema, a lista de Memberships não esta preenchida então não vai encontrar nenhum usuário. Não consegui localizar no seu código onde essa lista é preenchida, pode postar aqui por favor?
Rodrigo Reis Ferreira
Microsoft Certified -
Boa Tarde
O comando que você postou não esta sendo aceito pelo visual studio 2012
Esse é meu codigo:
protected void Unnamed6_Click(object sender, EventArgs e)
{
mdc = new ModelDataContext();
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
string b = (LoginUser.FindControl("Password") as TextBox).Text;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString());
if (mdc.Memberships.Count > 0)
{
Membership Membership = mdc.Memberships.First(me => me.UserId == c && me.Password == b);
if (Membership != null)
{
//BREAK
}
}
Erro:
Error 2 Operator '>' cannot be applied to operands of type 'method group' and 'int' C:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs 50 25 ControledeUsuarios
-
Ricardo,
Seguinte, antes de mais nada renomeie essa sua variável Membership, você está colocando ela com o mesmo nome da Classe.
Deixa o código como antes e tenta fazer assim:
Membership m = mdc.Memberships.First(me => me.UserId == c && me.Password == b); if (m != null) { //BREAK }
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
André
Coloquei da forma que você postou porem não deu resultado.
Erro de Servidor no Aplicativo '/'.
A sequência não contém elementos
Descrição: Ocorreu uma exceção sem tratamento 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: System.InvalidOperationException: A sequência não contém elementos
Erro de Origem:Linha 48: Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString()); Linha 49: Linha 50: Membership m = mdc.Memberships.First(me => me.UserId == c && me.Password == b); Linha 51: Linha 52: if (m != null)
Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs Linha: 50
Rastreamento de Pilha:[InvalidOperationException: A sequência não contém elementos] System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1157 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +342 System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute(Expression expression) +58 System.Linq.Queryable.First(IQueryable`1 source, Expression`1 predicate) +249 ControledeUsuarios.Account.Login.Unnamed6_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs:50 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9712662 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1586.0 -
Acredito que o problema esteja nesse seu mdc, tenta dessa forma:
if (mdc.Memberships != null && mdc.Memberships.Count() > 0) { Membership m = mdc.Memberships.First(me => me.UserId == c && me.Password == b); if (m != null) { //BREAK } }
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Boa Tarde André
Coloquei da forma que você postou acima porem não deu certo.
Erro de Servidor no Aplicativo '/'.
A sequência não contém elementos
Descrição: Ocorreu uma exceção sem tratamento 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: System.InvalidOperationException: A sequência não contém elementos
Erro de Origem:Linha 50: if (mdc.Memberships != null && mdc.Memberships.Count() > 0) Linha 51: { Linha 52: Membership m = mdc.Memberships.First(me => me.UserId == c && me.Password == b); Linha 53: if (m != null) Linha 54: {
Arquivo de Origem: c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs Linha: 52
Rastreamento de Pilha:[InvalidOperationException: A sequência não contém elementos] System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1157 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +342 System.Data.Linq.Table`1.System.Linq.IQueryProvider.Execute(Expression expression) +58 System.Linq.Queryable.First(IQueryable`1 source, Expression`1 predicate) +249 ControledeUsuarios.Account.Login.Unnamed6_Click(Object sender, EventArgs e) in c:\ARTSIM\SGSIM\ControledeUsuarios\Account\Login.aspx.cs:52 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9712662 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.6.1586.0 -
mude mdc.Memberships.First para
mdc.Memberships.FirstOrDefault
First vai dar erro se sua expressao me => me.UserId == c && me.Password == b resulte em 0 objetos
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 28 de novembro de 2016 18:38
-
Boa Tarde Pessoal
Coloquei da forma que o Willian postou e não deu mais erro.
Porem não esta entrando na minha condição.
Deveria entrar já que o IserId e a senha existem.
Mas lembrando que a senha esta em formato criptografado e eu estou pegando em formato digitado.
Eu creio que seja ai o problema.
Segue a tabela a qual estou pesquisando.
Aguardo retorno.
Obrigado
-
Nao vai entrar, pois voce o criterio nao é respeitado.
Creio que voce nao esteja criptografando o login e a senha na hora de comparar. a comparaçao:
me => me.UserId == c && me.Password == b
sempre vai retornar 0
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
Neste caso, comece analizando o que a Coleçao membership de retorna.
coloque este codigo antes do "if (mdc.Memberships != null && mdc.Memberships.Count() > 0)"
Debug.WriteLine("entrada: {0} - {1}",c ,b );//imprime suas variaveis de pesquisa
foreach (Membership m in mdc.Memberships) { Debug.WriteLine("{0} - {1}",m.UserId ,m.Password );//imprime o conteudo do memebership }
o resultado aparece na janela OutPut do visual studio.
Se possivel, poste alguns dos resultados aqui, principalmente as 5 primeiras linhas.
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator terça-feira, 29 de novembro de 2016 15:34
-
Boa Tarde
As minhas variaveis de pesquisas retornam
c = dfbccb9c-f744-4371-82eb-ccb281aa359f
b = 65280984
Neste caso a variavel c esta de acordo com o banco de dados. Ja a variavel password não esta pois no banco grava criptografado.
Porem eu não sei como mudar isso
Alguem pode me ajudar por favor
-
E as outras? o que retorna a coleçao MemberShip... voce adicionou o código que eu sugeri?
Sem isso , nao dá pra saber como construir a expressao de comparaçao.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator terça-feira, 29 de novembro de 2016 20:12
-
Bom dia Willian
Creio que não esta dando certo porque a expressão de comparação não bate com os dados do campo password.
Já que ele grava conforme imagem acima no banco de dados sql server 2014 em outro formato diferente do que o usuario digitou.
Expero que tenham entendido.
Fico no aguardo.
Obrigado.
-
Por isso eu preciso ver o que sua coleçao membership contem..voce adicionou o codigo que eu sugeri? pode postar o resultado?
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator quarta-feira, 30 de novembro de 2016 13:05
-
-
Eu nao quero a tabela membership... ela é inutil para a minha analise.. eu preciso que voce me de os resultados do codigo que eu sugeri.
Debug.WriteLine("entrada: {0} - {1}",c ,b );//imprime suas variaveis de pesquisa foreach (Membership m in mdc.Memberships) { Debug.WriteLine("{0} - {1}",m.UserId ,m.Password );//imprime o conteudo do memebership }
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Boa Tarde
Em que parte do meu código eu coloco seu Debug ??
protected void Unnamed6_Click(object sender, EventArgs e)
{
mdc = new ModelDataContext();
if (LoginUser.UserName != "")
{
string a = LoginUser.UserName;
string b = (LoginUser.FindControl("Password") as TextBox).Text;
CADUSUARIOS CADUSUARIOS = mdc.CADUSUARIOS.First(use => use.UserName == a);
if (CADUSUARIOS.Ativo == "S")
{
Guid c = Guid.Parse(CADUSUARIOS.UserId.ToString());
if (mdc.Memberships != null && mdc.Memberships.Count() > 0)
{
Membership m = mdc.Memberships.FirstOrDefault(me => me.UserId == c && me.Password == b);
if (m != null)
{
//Usando Cookie
HttpCookie CookieCodCliente = new HttpCookie("CodCliente", "".ToString());
Response.SetCookie(CookieCodCliente);
HttpCookie CookieCliente = new HttpCookie("SessionCliente", "".ToString());
Response.SetCookie(CookieCliente);
HttpCookie CookieClientes = new HttpCookie("SessionClientes", CADUSUARIOS.CLIENTE.ToString());
Response.SetCookie(CookieClientes);
HttpCookie CookieVendedor = new HttpCookie("SessionVendedor", CADUSUARIOS.VENDEDOR.ToString());
Response.SetCookie(CookieVendedor);
HttpCookie CookieProduto = new HttpCookie("SessionProduto", CADUSUARIOS.PRODUTO.ToString());
Response.SetCookie(CookieProduto);
HttpCookie CookieCategoria = new HttpCookie("SessionCategoria", CADUSUARIOS.CATEGORIA.ToString());
Response.SetCookie(CookieCategoria);
HttpCookie CookieRevista = new HttpCookie("SessionRevista", CADUSUARIOS.REVISTA.ToString());
Response.SetCookie(CookieRevista);
HttpCookie CookieMailing = new HttpCookie("SessionMailing", CADUSUARIOS.MAILING.ToString());
Response.SetCookie(CookieMailing);
HttpCookie CookieUsuarios = new HttpCookie("SessionUsuarios", CADUSUARIOS.VENDEDOR.ToString());
Response.SetCookie(CookieUsuarios);
HttpCookie CookieUsuario = new HttpCookie("SessionUsuario", a.ToString());
Response.SetCookie(CookieUsuario);
HttpCookie CookieIVC = new HttpCookie("SessionIVC", CADUSUARIOS.IVC.ToString());
Response.SetCookie(CookieIVC);
if (CADUSUARIOS.CLIENTE.Trim() == "LEITURA" || CADUSUARIOS.CLIENTE == "ESCRITA")
{
Response.Redirect("~/Clientes.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.MAILING == "LEITURA" || CADUSUARIOS.MAILING == "ESCRITA")
{
Response.Redirect("~/Mailing.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.PRODUTO == "LEITURA" || CADUSUARIOS.PRODUTO == "ESCRITA")
{
Response.Redirect("~/Produto.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.VENDEDOR == "LEITURA" || CADUSUARIOS.VENDEDOR == "ESCRITA")
{
Response.Redirect("~/Vendedores.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.CATEGORIA == "LEITURA" || CADUSUARIOS.CATEGORIA == "ESCRITA")
{
Response.Redirect("~/Categorias.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.REVISTA == "LEITURA" || CADUSUARIOS.REVISTA == "ESCRITA")
{
Response.Redirect("~/Revistas.aspx?" + "Usuario=" + a);
}
else if (CADUSUARIOS.USUARIO == "LEITURA" || CADUSUARIOS.USUARIO == "ESCRITA")
{
Response.Redirect("~/Usuarios.aspx?" + "Usuario=" + a);
}
}
}
}
}
} -
desta forma:
Membership m = mdc.Memberships.FirstOrDefault(me => me.UserId == c && me.Password == b); //coloque o codigo aqui - o resultado aparece na janela output if (m != null)
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
tem que adicionar "using System.Diagnostics;"
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
Agora foi falha minha.. eu pensei que a variavel m do foreach seria em un novo escopo. simplesmente faça:
Debug.WriteLine("entrada: {0} - {1}",c ,b );//imprime suas variaveis de pesquisa foreach (Membership m1 in mdc.Memberships) { Debug.WriteLine("{0} - {1}",m1.UserId ,m1.Password );//imprime o conteudo do memebership }
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-