.NET FormsAuthentication和HttpContext.Current.User.Identity.IsAuthenticated组合无法正常工作

时间:2015-08-13 13:30:15

标签: c# .net forms authentication web-config

我正在尝试创建一个简单的设置,用户导航到某个页面,如果他们未经过身份验证,则会进入登录页面。如果用户输入了正确的用户名和密码,他/她将被带回第一页,在那里他们可以将数据添加到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 piece

<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>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我可以看到你正在进行简单的表单身份验证。您是否尝试在设置cookie之前添加WebSecurity.Login?

WebSecurity.Login("admin", pwd, True);
FormsAuthentication.SetAuthCookie("admin", true);
FormsAuthentication.RedirectFromLoginPage("admin", true);

答案 1 :(得分:0)

我认为您需要在代码中检查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);