2010-10-18 30 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視圖狀態。一旦我重新啓用視圖狀態,角色信息似乎會像預期的那樣持續下去。