从不同页面访问登录控件

Access Login Control from Different Page

我有一个用 C# 编写的网站,用户通过登录控件向 SQL 数据库进行身份验证。目前一切正常,因为如果用户未登录,我正在使用 web.config 定向到 Login.aspx 页面。我想做的是从另一个访问登录控件页面但另外传递另一个参数。

例如...

web.config有以下内容:

<authentication mode="Forms">
    <forms defaultUrl="~/Default.aspx" loginUrl="~/Login.aspx" slidingExpiration="true" timeout="20"></forms>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

Login.aspx 页面如下所示

protected void LoginControl_Authenticate(object sender, AuthenticateEventArgs e)
{
    bool authenticated = this.ValidateCredentials(LoginControl.UserName, LoginControl.Password);

    if (authenticated)
    {
        FormsAuthentication.RedirectFromLoginPage(LoginControl.UserName, LoginControl.RememberMeSet);
    }
}

private bool IsAlphaNumeric(string text)
{
    return Regex.IsMatch(text, "^[a-zA-Z0-9-]+$");
}

private bool ValidateCredentials(string userName, string password)
{
    bool returnValue = false;

    if (this.IsAlphaNumeric(userName) && userName.Length <= 25 && password.Length <= 50)
    {
        string sqlConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

        using (SqlConnection sqlConnection1 = new SqlConnection(sqlConn))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = ("ValidateUser");
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("LoginName", userName.Trim());
                cmd.Parameters.AddWithValue("LoginPass", HashData.HashString(password.Trim()));
                cmd.Parameters.AddWithValue("Type", "Read");
                cmd.Connection = sqlConnection1;

                sqlConnection1.Open();

                if (cmd.ExecuteScalar() == null)
                {
                    returnValue = false;
                }

                else
                {
                    returnValue = true;
                }
            }
        }
    }

    return returnValue;
}

}

现在我想做的是在其他页面上使用相同的登录控件,以便我可以查看是否是同一用户登录但传递不同的 "Type" 参数,例如 "Edit" .

所以我希望它的工作方式是这样的...用户访问该站点并被重定向到 Login.aspx 页面。登录控件运行我的存储过程以验证它们是 "Read" 类型并将它们重定向到 Default.aspx。用户可以从此处单击“编辑”按钮。一旦他们这样做,相同的登录控件将通过 运行 相同的存储过程检查他们是否具有 "Edit" 权限,而不是将其作为 "Type" 参数传递。此时,如果结果为假,如果用户当前权限不允许,系统将提示用户登录,或者如果当前用户具有这些权限,则页面将只加载。有没有办法做我正在寻找的事情,或者我是否只需要使用多个登录控件或不同的文件夹结构并使用 web.config?

来完成这一切

您可以做的是创建一个母版页并将登录控件放在母版页中。让您希望能够进行身份验证的每个页面都继承自母版页,这将使其能够访问登录控件。

问题已解决...

我最终做的是让登录控件授权最低级别权限的用户。当用户尝试访问需要更高权限的页面时,我首先检查是否

 if (User.Identity.IsAuthenticated == true)

如果为真,那么我 运行 一个新查询,检查 User.Identity.Name 是否正确 "Type"。