从不同页面访问登录控件
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"。
我有一个用 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"。