我正在使用表单身份验证,并具有基本登录页面和默认页面。
当我登录登录页面并调用SignOn时,这非常有用。但是,当我仍在登录页面时,Membership.GetUser()
返回null。当我重定向到我的默认页面时,Membership.GetUser()
会返回我的用户信息。
有没有办法在登录页面上让这个方法返回我的用户。我已经阅读了谷歌的所有其他类似的问题,只有在重定向后它才会起作用。
如果您需要更多信息,请与我们联系。
以下是我用来验证信息设置的简单代码片段:
bool authenticated = User.Identity.IsAuthenticated;
string username = User.Identity.Name;
MembershipUser user = Membership.GetUser();
我将此代码放在登录页面和后面代码中的默认页面上,并且只有默认页面具有值,并显示在身份验证过程执行后对其进行身份验证。
答案 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)