我在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完成所有这些操作?
答案 0 :(得分:0)
您可以做的是创建母版页并将登录控件放在母版页中。让您希望能够进行身份验证的每个页面都从Master页面继承,这将使其能够访问Login Control。
答案 1 :(得分:0)
问题解决了......
我最终做的是让登录控件授权具有最低级别权限的用户。当用户尝试访问需要更高权限的页面时,我首先检查是否
""
如果为true,那么我运行一个新查询来检查User.Identity.Name是否正确&#34;输入&#34;。