FormsAuthentication Membership.GetUser()Null

时间:2010-01-29 15:58:05

标签: c# forms-authentication

我正在使用表单身份验证,并具有基本登录页面和默认页面。

当我登录登录页面并调用SignOn时,这非常有用。但是,当我仍在登录页面时,Membership.GetUser()返回null。当我重定向到我的默认页面时,Membership.GetUser()会返回我的用户信息。

有没有办法在登录页面上让这个方法返回我的用户。我已经阅读了谷歌的所有其他类似的问题,只有在重定向后它才会起作用。

如果您需要更多信息,请与我们联系。

以下是我用来验证信息设置的简单代码片段:

bool authenticated = User.Identity.IsAuthenticated;
            string username = User.Identity.Name;

            MembershipUser user = Membership.GetUser();

我将此代码放在登录页面和后面代码中的默认页面上,并且只有默认页面具有值,并显示在身份验证过程执行后对其进行身份验证。

5 个答案:

答案 0 :(得分:13)

要尝试的其他内容是以下代码:

 MembershipUser user = Membership.GetUser(username);
 GenericIdentity identity = new GenericIdentity(user.UserName);
 RolePrincipal principal = new RolePrincipal(identity);
 System.Threading.Thread.CurrentPrincipal = principal;
 HttpContext.Current.User = principal;

答案 1 :(得分:11)

这可能是因为您允许登录页面上的匿名用户。因此,浏览器不会向此页面发送任何必要的信息。

答案 2 :(得分:2)

我遇到了同样的情况,这是我在MVC 4 .NET 4.5上的作用。

Membership.GetUser(HttpContext.Current.User.Identity.Name)

答案 3 :(得分:2)

我遇到了类似的问题,问题是我在网络配置中缺少身份验证方法=表单。

<system.web>
    <authentication mode="Forms"/>
    ....

不要忘记那个(我正在将旧的旧网站迁移到aspnet)

答案 4 :(得分:0)

我遇到了这个问题,发现这是因为有多个会员提供商,所以不是

Membership.GetUser()

你可以尝试

Membership.Providers["MyMembershipProvider"].GetUser()

或更具体地说

Membership.Providers["MyMembershipProvider"].GetUser(LoginCtrl.UserName, false)