我有一个奇怪的问题。我正在使用带有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>
请有人在这里指出我的方向,这似乎更像是一个错误而不是编程错误,但我想听听你可能的解决方案。