我想在登录后获取用户名,但它不起作用。
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");
}
}
这是我的错误:
答案 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会员资格为您处理这部分内容;如果您使用自定义身份验证方案,则肯定需要执行该步骤。