2010-10-18 37 views
0

我有一个ASP.NET webforms网站,它使用.NET MySql连接器和MySql作为后端。我正在使用基于角色的身份验证来保护我的网站的某些区域。问题是,在将我的网站移动到服务器(在我的本地开发计算机上正常工作)后,用户的角色信息未被保留。正在发生的事情是,我可以使用登录控件登录,这个登录控件在对用户进行身份验证之后指向管理区。此时User.IsInRole(“admin”)为true。但是当我点击链接转到管理部分中的其他页面时,User.IsInRole(“admin”)为false。ASP.NET角色信息不被保存

的Web.config

<membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15"> 
    <providers> 
     <remove name="MySQLMembershipProvider"/> 
     <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Clear" maxInvalidPasswordAttempts="3" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="3" passwordStrengthRegularExpression="" autogenerateschema="true"/> 
    </providers> 
</membership> 
<profile> 
    <providers> 
     <remove name="MySQLProfileProvider"/> 
     <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/> 
    </providers> 
</profile>  
<roleManager enabled="true" defaultProvider="MySqlRoleProvider"> 
    <providers> 
     <remove name="MySqlRoleProvider"/> 
     <add name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/> 
    </providers> 
</roleManager> 

的Global.asax

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
     if (HttpContext.Current.User != null) { 
      if (Request.IsAuthenticated == true) { 
       FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value); 
       // In this case, ticket.UserData = "Admin"     
       string[] roles = new string[1] { ticket.UserData }; 
       FormsIdentity id = new FormsIdentity(ticket); 
       Context.User = new System.Security.Principal.GenericPrincipal(id, roles); 
      } 
     } 
    } 

回答

0

您正在使用不同的数据源开发和服务器(我)吗?如果是这样,请确保您的数据同步。只有在数据库连接中指定(local).作为服务器时,情况才是如此。

否则,输出到日志以查看用户角色有没有包含“admin”。

0

事实证明,问题是我已禁用整个网站在我的web.config视图状态。一旦我重新启用视图状态,角色信息似乎会像预期的那样持续下去。