登录后获取用户名

时间:2013-03-26 09:37:14

标签: asp.net asp.net-membership

我想在登录后获取用户名,但它不起作用。

public partial class Login : System.Web.UI.Page
    {
        string strUser;

        protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            strUser = Membership.GetUser().UserName;

            Response.Redirect("Home");
        }
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            strUser = Membership.GetUser().UserName;
            Response.Redirect("Home");
        }
    }

这是我的错误: enter image description here

2 个答案:

答案 0 :(得分:1)

Membership.GetUser().UserName为null,因为新的主体对象尚未附加到当前的HttpContext对象。

因此,您需要使用Login控件中的用户名显式检索最近登录的用户。

更新:归功于jadarnel27

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
  // Get the username from login control and retrieves the user info explicitly
  Membership user = Membership.GetUser(Login1.Username); 
  ...
}

答案 1 :(得分:0)

您需要检查并确保用户的登录成功。看起来你只是使用标准的ASP.NET成员资格,所以这应该有效:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    if(e.Authenticated)
    {
        strUser = Membership.GetUser().UserName;
        Response.Redirect("Home");
    }
    else
    {
        strUser = "Login Failed!";
    }
}

我使用这些控件已经有一段时间了,但您可能需要先自己确定e.Authenticated的值并设置它。如果是这样,你需要把它放在我上面写的if-block之前:

bool authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);
e.Authenticated = authenticated;

我认为vanilla ASP.NET会员资格为您处理这部分内容;如果您使用自定义身份验证方案,则肯定需要执行该步骤。