从不同页面访问登录控制

时间:2015-05-05 18:03:56

标签: c# asp.net webforms forms-authentication

我在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;
}

}

现在我想要做的是在其他页面上使用相同的登录控件,以便我可以看到同一个用户是否已登录但是传递了另一个&#34; Type&#34;参数如&#34;编辑&#34;。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

问题解决了......

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

""

如果为true,那么我运行一个新查询来检查User.Identity.Name是否正确&#34;输入&#34;。

相关问题