Uso do Membership.GetUser com o Login Control

14/07/2009

Olá Pessoal.
Já utilizo o comando "Membership.GetUser" abaixo normalmente em outras telas, com o VS 2008.
Entretanto estou precisando utilizá-lo numa tela com o ASP.NET Login Control.
E ao utilizálo nessa tela da a mensagem de erro abaixo "Object reference not set to an instance of an object". Grato
Sidney ---------------------------------------------- using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls; public partial class login : System.Web.UI.Page
{
    MembershipUser u;
    protected void Page_Load(object sender, EventArgs e)
    {     }
    protected void LoginButton_Click(object sender, EventArgs e)
    {
        u = Membership.GetUser(User.Identity.Name);
        Session.RemoveAll();
        Session["%UsuarioNome"] = u.UserName;
    }
} ----------------------------------------------   Server Error in '/tpm2.0' Application.
-------------------------------------------------------------------------------- Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error:
Line 21:         u = Membership.GetUser(User.Identity.Name);
Line 22:         Session.RemoveAll();
Line 23:         Session["%UsuarioNome"] = u.UserName;
Line 24:     }
Line 25: }
  Source File: c:\Desenvolvimento VS2008\tpm\tpm2.0\login.aspx.cs    Line: 23 Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
   login.LoginButton_Click(Object sender, EventArgs e) in c:\Desenvolvimento VS2008\tpm\tpm2.0\login.aspx.cs:23
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746  
Sidney Mendonça/

Sidney Mendonça/

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

14/07/2009

Olá, não codifique o LoginButton, perceba que você está chamando um usuário que ainda não está logado.
User.Identity.Name //Aqui ainda não existe o usuário




protected void LoginButton_Click(object sender, EventArgs e)
{

u = Membership.GetUser(User.Identity.Name);
Session.RemoveAll();
Session["%UsuarioNome"] = u.UserName;

}

=============================================================
Faça o seguinte procure pelo evento LoggingIn do controle Login

E implemente o seguinte método


protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    {
        MembershipUser user = Membership.GetUser(Login1.UserName);
        if (user!= null)
        {
           Session.RemoveAll();
            Session["%UsuarioNome"] = user.UserName;
           e.Authenticated = true;

        }
    }

 

GOSTEI 0
Sidney Mendonça/

Sidney Mendonça/

14/07/2009

Olá Fabio. Deu erro de compilação na linha  "e.Authenticated = true". Parece que o e não tem essa propriedade. Tirei a linha e funcionou normalmente. Para que eu preciso setar o e.Authenticated = true? Grato Sidney
GOSTEI 0
Fabio Mans

Fabio Mans

14/07/2009

Serve para autenticar o usuário.
Não é necessário o uso da Session que vc criou.

Então faz o seguinte no lugar da linha que você removeu.


FormsAuthentication.RedirectFromLoginPage(u.UserName, false);


Quando você precisar do nome dele faz o seguinte.


string nome = HttpContext.Current.User.Identity.Name;

Para saber se o usuário está autenticado faça o seguinte.


if (HttpContext.Current.User.Identity.IsAuthenticated)
{
   Se sim faz alguma coisa
}


Assista 5 aulas que criei sobre autenticação.

Abraços.


GOSTEI 0
Devmedia

Devmedia

14/07/2009

Sidney,
a resposta do consultor foi suficiente? Podemos encerrar o chamado?
GOSTEI 0
Sidney Mendonça/

Sidney Mendonça/

14/07/2009

Atendimento concluido. Grato   Sidney
GOSTEI 0
POSTAR