У меня странная проблема.Я использую c # asp.net с аутентификацией форм с Mysql .На веб-сайте есть 2 папки, включая root, «Пользователь» и «Администратор».
Я создал тестового пользователя с помощью инструмента настройки asp net и правильно настроил разрешения для папок.
Я использую элемент управления Login с пользовательским кодом в событии authenticate.
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>
Пожалуйста, кто-то может указать мне направление, это больше похоже на ошибку, чем на ошибку программирования, но я хотел бы услышать ваши возможные решения.