【问题标题】:FormsAuthentication Membership.GetUser() NullFormsAuthentication Membership.GetUser() Null
【发布时间】:2010-01-29 15:58:04
【问题描述】:

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

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

有什么方法可以让我在登录页面上时让这个方法返回我的用户。我在谷歌上读过其他人也有类似的问题,只有在你重定向后才会起作用。

如果您需要更多信息,请告诉我。

这是我用来验证信息是否正在设置的简单代码 sn-p:

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

            MembershipUser user = Membership.GetUser();

我把这段代码放在后面代码中的登录页面和默认页面上,只有默认页面有值,并显示认证过程执行后通过了认证。

【问题讨论】:

    标签: c# forms-authentication


    【解决方案1】:

    其他可以尝试的代码如下:

     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;
    

    【讨论】:

    • 太棒了!这非常适合使您刚刚在 LogOn 中验证的用户成为当前用户。我把它放在if (Membership.ValidateUser(model.UserName, model.Password)... 之后。谢谢!
    【解决方案2】:

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

    【讨论】:

    • 这实际上是有道理的。由于登录页面是匿名用户唯一允许的页面,因此系统无法拉取会员信息,直到它位于需要经过身份验证的用户的页面上......非常有趣......
    • 没错。在登录之前如何知道谁登录了?
    • 好的,谢谢您的信息。我很确定就是这样。欣赏它。
    【解决方案3】:

    我也遇到了同样的情况,这就是在 MVC 4 .NET 4.5 上对我有用的方法。

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

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,结果是我在 web config 中缺少 authentication method = form 。

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

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

      【讨论】:

      • 这对我的问题进行了排序 - 只花了 4 个小时就找到了,谢谢!
      【解决方案5】:

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

      Membership.GetUser()
      

      你可以试试

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

      或者更具体的

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

      【讨论】:

        【解决方案6】:

        我有一个类似的问题(它是网站上的所有页面),它是由 AspNetSqlMembershipProvider 连接字符串中的错误引起的,在不同的环境中应该是不同的但不是,所以它在本地工作但不是在部署到服务器。

        【讨论】:

          猜你喜欢
          • 2011-11-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多