Нет текста ошибки входа для проверки подлинности на основе ролей в ASP.NET - PullRequest
0 голосов
/ 30 августа 2009

У меня есть сайт проверки подлинности на основе ролей / членства в ASP.NET. Есть подпапка и ее страницы, доступ к которым возможен только с определенной ролью. Проблема в том, что на странице входа в систему не отображается сообщение об ошибке, если какой-либо пользователь из недопустимых групп ролей входит на страницу входа. Я имею в виду, что когда пользователь из AllowedRole входит в систему, страница входа перенаправляет пользователя правильно на защищенную страницу, но когда пользователь из NonAllowedRole пытается войти в систему, он / она правильно входит в систему, но сообщения об ошибках не отображаются, пользователь возвращается на страницу входа без какой-либо информации. У меня есть FailureText, установленный в форме входа, но он не отображается. Событие loginForm.LoginError также не вызывается. Я пробовал этот код, но он также не отображает:

protected void frmLogin_LoggedIn(object sender, EventArgs e)
        {
            if (!User.IsInRole("AllowedRole"))
                frmLogin.FailureText = "Access denied.";
                //Label1.Text = "Access denied."; //doesn't work either
        }

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 30 августа 2009

Что вы можете сделать, это проверить параметр строки запроса ReturnUrl и, если это папка, в которой вы «отказали», перенаправить пользователя либо на страницу с ошибкой, либо на разрешенную страницу входа. Как это:

protected void frmLogin_LoggedIn(object sender, EventArgs e)
{
    if (!User.IsInRole("AllowedRole") && 
        InRestrictedArea(Request.QueryString["ReturnUrl"]))
    {
        Response.Redirect("Not-Allowed-Here.aspx");
    }
}

Определите InRestrictedArea, чтобы проверить, находятся ли запрошенные области там, где они не разрешены.

1 голос
/ 30 августа 2009

Я не знаю, где найти документацию, подтверждающую это. Этот ответ основан на наблюдении за поведением, которое я видел в приложениях, которые я написал.

Страница входа исключена из правил разрешенного доступа. Это должно быть. Скажем, у вас есть сайт, где весь сайт запрещает анонимных пользователей, даже на корневом уровне. Пользователи должны иметь доступ к странице входа, чтобы иметь возможность войти в систему.

Чтобы разрешить вашу дилемму, вам нужно добавить метку (я бы назвал ее lblError) и в вашей Page_Load добавить следующее (пример кода C #):

if(User.IsLoggedIn)
{
   If(!User.IsInRole("AllowedRole")
   {
      lblError.Text = "Access denied.";
   }


}

Добавлена ​​

Если подумать, причина отсутствия ошибки на странице входа в систему заключается в том, что ошибка возникает, когда пользователь пытается получить доступ к защищенной странице, а не к странице входа в систему.

Однако я считаю, что мое предложение будет работать и для вашей ситуации.

...