1

我有一个奇怪的问题。我正在使用带有Mysql的表单身份验证的 c# asp.net 。该网站在根目录中有 2 个文件夹,“用户”和“管理员”。

我已经使用 asp net 配置工具创建了一个测试用户,并正确设置了文件夹的权限。

我在身份验证事件中使用带有自定义代码的登录控件。

    protected void Login1_Authenticate1(object sender, AuthenticateEventArgs e)
    {
        if (Membership.ValidateUser(Login1.UserName, Login1.Password))
        {
            e.Authenticated = true;
        }
        else
        {
            e.Authenticated = false;
        }
    }

一旦 Membership.ValidateUser 函数执行,所有角色都被清除并且没有分配给登录用户(尽管用户成功登录)

我在 Membership.ValidateUser 之前设置了一个监视和一个断点。

在运行 ValidateUser 之前:

    Roles.GetAllRoles() {string[2]} string[]

运行 ValidateUser 后:

    Roles.GetAllRoles() {string[0]} string[]

用户确实登录成功,但无法访问任一文件夹(用户确实可以访问这两个角色,通过查看数据库确认)

我还注意到,如果我在用户登录后修改 web.config 文件并保存它(当网站仍在运行时),那么角色都会再次填充,用户可以

这是根 web.config 文件:

    <?xml version="1.0"?>
    <configuration>
        <connectionStrings>
            <add name="MySqlMembershipConnection" connectionString="Data Source=XXXX;user id=XXXX;password=XXXX;database=XXXX;" providerName="MySql.Data.MySqlClient"/>
        </connectionStrings>
        <system.web>
        <authentication mode="Forms">
           <forms loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" timeout="15"
              cookieless="UseCookies" />
        </authentication>

            <membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15">
                <providers>
                    <clear/> 
                    <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, mysql.web" connectionStringName="MySqlMembershipConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" autogenerateschema="true"/>
                </providers>
            </membership>

          <roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="MySqlRoleProvider" cookieName=".ASPXROLES" cookiePath="/" cookieTimeout="15" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All">
                <providers>
                    <clear/>
                    <add connectionStringName="MySqlMembershipConnection" applicationName="/" name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, mysql.web" autogenerateschema="true"/>
                </providers>
            </roleManager>

            <profile enabled="true" defaultProvider="MySqlRoleProvider">
                <providers>
                    <clear/>
                    <add type="MySql.Web.Security.MySqlProfileProvider, mysql.web" name="MySqlProfileProvider" applicationName="/" connectionStringName="MySqlMembershipConnection" autogenerateschema="true"/>
                </providers>
            </profile>
            <compilation debug="true"/></system.web>
        <system.webServer>
        <validation validateIntegratedModeConfiguration="false"></validation>
      </system.webServer>
    </configuration>

管理文件夹 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Admin" />
        <deny users="*" />
    </authorization>
</system.web>

用户文件夹 web.config:

<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.web>
        <authorization>
        <allow roles="User" />
        <allow roles="Admin" />
        <deny users="*" />
        </authorization>
        </system.web>
</configuration>

请有人在这里指出我的方向,这似乎更像是一个错误而不是编程错误,但我想听听你可能的解决方案。

4

0 回答 0