0

我有一个基于 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
        }

我究竟做错了什么?

4

2 回答 2

2

您可以做的是检查 ReturnUrl 查询字符串参数,如果是您“拒绝”文件夹,请将用户重定向到错误页面或允许的登录页面。像这样:

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

定义InRestrictedArea以检查请求的区域是否是不允许的区域。

于 2009-08-30T13:23:36.327 回答
1

我不知道在哪里可以找到支持这一点的文档。这个答案是基于对我所写的 io 应用程序行为的观察。

登录页面被排除在允许的访问规则之外。它需要。假设您有一个站点,其中整个站点都不允许匿名用户,即使在根级别也是如此。用户需要能够访问登录页面才能登录。

要解决您的困境,您需要添加一个标签(我称之为 lblError)并在您的 Page_Load 中添加以下内容(C# 示例代码):

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


}

添加

考虑到这一点,登录页面没有错误的原因是当用户尝试访问受保护的页面时发生错误,而不是在登录页面内。

但是,我相信我的建议也适用于您的情况。

于 2009-08-30T13:17:50.560 回答