【问题标题】:ASP.NET role information not being persistedASP.NET 角色信息没有被持久化
【发布时间】:2023-03-15 00:23:01
【问题描述】:

我有一个使用 .NET MySql 连接器和 MySql 作为后端的 ASP.NET 网络表单网站。我正在使用基于角色的身份验证来保护我网站的某些区域。问题是在我将站点移动到服务器后,用户的角色信息没有被保留(在我的本地开发机器上工作正常)。发生的事情是我可以使用登录控件登录,该登录控件在验证用户身份后将我引导到管理区域。此时 User.IsInRole("admin") 为真。但是,当我单击链接转到管理部分中的不同页面时,User.IsInRole("admin") 为 false。

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>  

全球.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);
            }
        }
    }

【问题讨论】:

    标签: asp.net roles


    【解决方案1】:

    您是否在开发和服务器上使用不同的数据源(我会)?如果是这样,请确保您的数据是同步的。仅当您将 (local). 指定为数据库连接中的服务器时,才可能出现这种情况。

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

    【讨论】:

      【解决方案2】:

      事实证明,问题在于我在 web.config 中禁用了整个站点的视图状态。重新启用视图状态后,角色信息似乎会按预期保留。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        • 2015-07-21
        • 2017-11-27
        • 2012-01-09
        • 1970-01-01
        • 2017-05-18
        • 1970-01-01
        相关资源
        最近更新 更多