.NET FormsAuthentication 和 HttpContext.Current.User.Identity.IsAuthenticated 组合不起作用
.NET FormsAuthentication and HttpContext.Current.User.Identity.IsAuthenticated combination not working
我正在尝试创建一个简单的设置,用户可以在其中导航到一个页面,如果他们未通过身份验证,则会转到登录页面。如果用户输入了正确的用户名和密码,he/she 将返回到第一页,他们可以在其中将数据添加到 SQL 数据库。不幸的是,到目前为止,当用户通过身份验证时,他们会从第一页跳回登录页面(例如,用户未通过身份验证)。这是我的代码:
第一页(用户可以输入数据的地方)的适用代码
protected void Page_Load(object sender, EventArgs e)
{
/*Make sure the user is authenticated. If not, redirect them to the Login page*/
if (!HttpContext.Current.User.Identity.IsAuthenticated)
FormsAuthentication.RedirectToLoginPage();
else
LabelMsg.Text = "Authenticated: " + HttpContext.Current.User.Identity.IsAuthenticated.ToString();
}//end Page_Load()
登录页面的适用代码:
using (SqlDataAdapter sda = new SqlDataAdapter())
{
sda.SelectCommand = myCommand;
DataTable dt = new DataTable();
sda.Fill(dt);
GridView GridViewBookList = new GridView();
GridViewBookList.DataSource = dt;
GridViewBookList.DataBind();
if (GridViewBookList.Rows.Count > 0)
{
FormsAuthentication.SetAuthCookie("admin", true);
FormsAuthentication.RedirectFromLoginPage("admin", true);
}
else
LabelMsg.Text = "Incorrect username or password";
}
Web.Config张
<location path="~/whatsnew/add-newbook.aspx">
<!--Unauthenticated users cannot access this page-->
<system.web>
<authentication mode="Forms">
<!--.NEWBOOK is the name of the cookie used in authorization-->
<forms loginUrl="~/whatsnew/login.aspx" defaultUrl="~/default.aspx" requireSSL="true" name=".NEWBOOK"/>
</authentication>
<authorization>
<deny users="?"/>
<allow roles="admin"/>
</authorization>
</system.web>
如有任何帮助,我们将不胜感激。
我可以看到您正在进行简单的表单身份验证。您是否尝试过在设置 cookie 之前添加 WebSecurity.Login?
WebSecurity.Login("admin", pwd, True);
FormsAuthentication.SetAuthCookie("admin", true);
FormsAuthentication.RedirectFromLoginPage("admin", true);
我认为您需要检查代码中的 Request.IsAuthenticated。如果您想使用 HttpContext.Current.User.IsAuthenticated,根据我的经验,我必须通过在我的登录页面中说出类似以下内容来设置它:
string username = "My username";
string[] roles = new string[] {"Role1", "Role2"};
HttpContext.Current.User =
new GenericPrincipal(new GenericIdentity(userName), roles);
我正在尝试创建一个简单的设置,用户可以在其中导航到一个页面,如果他们未通过身份验证,则会转到登录页面。如果用户输入了正确的用户名和密码,he/she 将返回到第一页,他们可以在其中将数据添加到 SQL 数据库。不幸的是,到目前为止,当用户通过身份验证时,他们会从第一页跳回登录页面(例如,用户未通过身份验证)。这是我的代码:
第一页(用户可以输入数据的地方)的适用代码
protected void Page_Load(object sender, EventArgs e)
{
/*Make sure the user is authenticated. If not, redirect them to the Login page*/
if (!HttpContext.Current.User.Identity.IsAuthenticated)
FormsAuthentication.RedirectToLoginPage();
else
LabelMsg.Text = "Authenticated: " + HttpContext.Current.User.Identity.IsAuthenticated.ToString();
}//end Page_Load()
登录页面的适用代码:
using (SqlDataAdapter sda = new SqlDataAdapter())
{
sda.SelectCommand = myCommand;
DataTable dt = new DataTable();
sda.Fill(dt);
GridView GridViewBookList = new GridView();
GridViewBookList.DataSource = dt;
GridViewBookList.DataBind();
if (GridViewBookList.Rows.Count > 0)
{
FormsAuthentication.SetAuthCookie("admin", true);
FormsAuthentication.RedirectFromLoginPage("admin", true);
}
else
LabelMsg.Text = "Incorrect username or password";
}
Web.Config张
<location path="~/whatsnew/add-newbook.aspx">
<!--Unauthenticated users cannot access this page-->
<system.web>
<authentication mode="Forms">
<!--.NEWBOOK is the name of the cookie used in authorization-->
<forms loginUrl="~/whatsnew/login.aspx" defaultUrl="~/default.aspx" requireSSL="true" name=".NEWBOOK"/>
</authentication>
<authorization>
<deny users="?"/>
<allow roles="admin"/>
</authorization>
</system.web>
如有任何帮助,我们将不胜感激。
我可以看到您正在进行简单的表单身份验证。您是否尝试过在设置 cookie 之前添加 WebSecurity.Login?
WebSecurity.Login("admin", pwd, True);
FormsAuthentication.SetAuthCookie("admin", true);
FormsAuthentication.RedirectFromLoginPage("admin", true);
我认为您需要检查代码中的 Request.IsAuthenticated。如果您想使用 HttpContext.Current.User.IsAuthenticated,根据我的经验,我必须通过在我的登录页面中说出类似以下内容来设置它:
string username = "My username";
string[] roles = new string[] {"Role1", "Role2"};
HttpContext.Current.User =
new GenericPrincipal(new GenericIdentity(userName), roles);