У меня возникают трудности с реализацией настраиваемого ASP.NET RoleProvider.
Прежде всего, позвольте мне показать вам соответствующие настройки в моем файле web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"
name="FormsAuthentication"
path="Default.aspx"
timeout="20"/>
</authentication>
<membership defaultProvider="MembershipProvider">
<providers>
<clear />
<add name="MembershipProvider"
type="CompanyName.Security.MembershipProvider" />
</providers>
</membership>
<roleManager defaultProvider="RoleProvider"
enabled="true">
<providers>
<clear />
<add name="RoleProvider"
type="CompanyName.Security.RoleProvider" />
</providers>
</roleManager>
</system.web>
<location path="Employees.aspx">
<system.web>
<authorization>
<deny users="?"/>
<allow roles="Employees"/>
</authorization>
</system.web>
</location>
</configuration>
Вот код обработчика события кнопки входа в систему:
if (Membership.ValidateUser(tbxUsername.Text, tbxPassword.Text))
Response.Redirect("./Employees.aspx");
else
{
tbxUsername.Text = string.Empty;
tbxPassword.Text = string.Empty;
tbxUsername.Focus();
lblLogin.Visible = true;
}
Боковое примечание на основе предложения FormsAuthentication.RedirectFromLoginPage ():
[Было предложено использовать FormsAuthentication.RedirectFromLoginPage () вместо Response.Redirect (). В конце концов, я хотел бы перенаправить пользователя на другую страницу в зависимости от его роли. Я не знаю, как FormsAuthentication.RedirectFromLoginPage () позволит мне это сделать, поскольку он не принимает URL-адрес перенаправления в качестве параметра. Кроме того, насколько я понимаю, я мог бы вызвать FormsAuthentication.SetAuthCookie () до Response.Redirect (), чтобы создать файл cookie аутентификации, который создает FormsAuthentication.RedirectFromLoginPage (). Пожалуйста, дайте мне знать, если мой мыслительный процесс здесь неправильный.]
Пройдя по источнику, я вижу, что Membership.ValidateUser () выполняет функцию ValidateUser () моего настраиваемого класса MembershipProvider. Однако, когда действительный пользователь входит в систему и перенаправляется на Employees.aspx, пользователь возвращается на Login.aspx **? ReturnUrl =% 2fEmployees.aspx **. Я предполагаю, что это связано с тем, что, хотя пользователь аутентифицируется, он / она не проходит авторизацию на ресурсе Employees.aspx.
Исходя из этого предположения, я создал точки останова для каждой функции в моем настраиваемом классе RoleProvider, чтобы увидеть, где что-то работает неправильно. Ни один из них не прерывает выполнение при отладке. Большая часть кода в моем RoleProvider выбрасывает NotYetImplementetExceptions, но я все равно ожидаю, что попаду в точки останова (и затем реализовал бы эти необходимые функции). Вот две реализованные мною упрощенные функции:
public override string[] GetRolesForUser(string username)
{
return new string[1] {"Employees"};
}
public override bool IsUserInRole(string username, string roleName)
{
return true;
}
Я предполагаю, что, поскольку код RoleProvider никогда не выполняется, что-то не так с моим файлом web.config.
Я искал ответ на этот вопрос последние два дня и безуспешно пробовал различные изменения. Кто-нибудь видит, где я ошибаюсь?
Заранее спасибо!